鱼C论坛

 找回密码
 立即注册
查看: 2504|回复: 3

求错误是啥意思 怎么改

[复制链接]
发表于 2017-11-9 17:23:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码:
"""
import threading
import math
import os

# 自定义中断类
class mythread(threading.Thread):
    # 构造方法
    def __init__(self,name):
        threading.Thread.__init__(self,name=name)
        self.num1=num
    # 重写run方法
    def run(self):
        OutPrime(self.name)
def isprime(k):
    # 如果为2或者3时 为质数
    if k == 2 or k == 3:
        return True
    # 不在6的倍数两侧的一定不是质数
    if k % 6 != 1 and k % 6 != 5:
        return False
    # 取num的平方根
    tmp = int(math.sqrt(k)) + 1
    # 在6的倍数的两侧的也可能不是质数
    for i in range(5, tmp, 6):
        if k % i == 0 or k % (i + 2) == 0:
            return False
    # 是质数
    return True
def OutPrime(name):
    global num
    global lock
    while num!=0:
        lock.acquire()               # 得到一个锁,锁定
        if isprime(num):
            print("线程:", name, "质数:", num)
            PrimeList.append(num)
        num = num - 1             # 票售完   退出程序
        lock.release()               # 释放锁

# Start of the main function
num= 1000                     # 初始化票数
lock = threading.Lock()          # 创建锁
PrimeList=[]
threadlist=[]
for k in range(10):
    th=mythread("thread"+str(k))
    th.start()

运行结果:……
线程: thread1 质数: 37
线程: thread1 质数: 31
线程: thread1 质数: 29
线程: thread1 质数: 23
线程: thread1 质数: 19
线程: thread1 质数: 17
线程: thread1 质数: 13
线程: thread1 质数: 11
线程: thread1 质数: 7
线程: thread1 质数: 5
线程: thread1 质数: 3
线程: thread1 质数: 2
线程: thread1 质数: 1
Exception in thread thread5:
Traceback (most recent call last):
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib\threading.py", line 916, in _bootstrap_inner
    self.run()
  File "D:\设计项目\阶乘练习\test.py", line 232, in run
    OutPrime(self.name)
  File "D:\设计项目\阶乘练习\test.py", line 253, in OutPrime
    if isprime(num):
  File "D:\设计项目\阶乘练习\test.py", line 241, in isprime
    tmp = int(math.sqrt(k)) + 1
ValueError: math domain error

请求帮助,错误提示是什么意思;怎么改?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-11-9 17:27:13 | 显示全部楼层
k值有负数
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-9 18:05:11 From FishC Mobile | 显示全部楼层
k取到了负数,在素数判定函数里加入一条判定
if k < 2:
     return False
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-9 23:03:16 | 显示全部楼层
你传入的实参num在循环中不停-1变为负数导致sqrt函数抛出异常
在OutPrime函数中,你需要把你的循环条件修改,如改成
  1. while num>=0:
  2.     # 你的循环体
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-12-25 19:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表