为什么此 python 代码会出现运行时错误?

Why does this python code gives runtime error?

def isPrime(n):
    for i in range(2,math.sqrt(n)):
        if n%i ==0 :
            return False

    return True



#limits calculated using prime number theory by hand
primes=[]
for num in range(104319,114319):
    if isPrime(num):
        primes.append(num)

我正在使用 Ideone。

这是错误

Runtime error time: 0.03 memory: 9984 signal:-1

Traceback (most recent call last): File "./prog.py", line 13, in File "./prog.py", line 2, in isPrime NameError: name 'math' is not defined

math.sqrt returns 一个浮动对象,但是 range 需要一个 int 对象。你应该做

def isPrime(n):
    for i in range(2,int(math.sqrt(n))+1): #Convert the result of math.sqrt to int
        if n%i ==0 :
            return False
    return True

编辑:编辑后"NameError: name 'math' is not defined",您应该在开始时导入数学

import math

def isPrime(n):
#...

在代码的顶部,您需要像这样导入要调用的模块

import math

它给你那个错误,因为你忘记导入 math。但是,即使您这样做了,您仍然会遇到错误,因为 range() 需要一个整数参数,而 math.sqrt() returns 需要一个 float。此外,您需要比平方根高一个,因为 range() 的第二个参数是独占的。你可以这样做:

import math

def isPrime(n):
    for i in range(2, int(math.sqrt(n)) + 1):
        if n%i == 0:
            return False

    return True



#limits calculated using prime number theory by hand
primes=[]
for num in range(104319,114319):
    if isPrime(num):
        primes.append(num)

以下应该修复您的代码。

import math

def isprime(n):
     for i in range(2, int(math.sqrt(n))):
          if n%i == 0:
               return False
          else:
               return True