1

我有一个函数来检查一个数字是否是平方根:

def primeness(n):
    for x in range(2, (n**0.5) + 1):
        if n % x == 0:
            return False
    return True
def main():
    n = input('Type a digit \n')
    if primeness(n):
        print(n, 'is a prime number')
    else:
        print(n, 'is not a prime number')
main()

但是,每当我运行它时,我都会收到此错误:

Traceback (most recent call last):
  File "C:/Users/Matt/Desktop/Python Stuff/test.py", line 12, in <module>
main()
  File "C:/Users/Matt/Desktop/Python Stuff/test.py", line 8, in main
if primeness(n):
  File "C:/Users/Matt/Desktop/Python Stuff/test.py", line 2, in primeness
for x in range(2, (n**0.5) + 1):
TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'float'

我究竟做错了什么?

4

5 回答 5

5

在 python3 中,input相当于旧的raw_input. 因此,您需要执行强制转换并将其转换为整数。

def main():
    n = int(input('Type a digit \n')) #right here
    if primeness(n):
        print(n, 'is a prime number')
    else:
        print(n, 'is not a prime number')

如果您不能保证字符串是整数,则需要进行一些转换,例如int(float(input()))或使用try-except块来处理问题。

于 2012-12-17T01:41:33.067 回答
3

您必须将输入字符串转换为 int

您也可能会遇到问题

for x in range(2, (n**0.5) + 1):

n ** 0.5可能返回一个浮点数,而范围需要一个整数。通过舍入或将其转换为 int 来修复它

于 2012-12-17T01:45:11.497 回答
1

您不需要计算n的平方根;您可以改为计算x的平方:

def primeness(n):
    x = 2
    while x * x <= n:
        if x % n == 0:
            return False
        x = x + 1
    return True
于 2012-12-17T04:16:11.500 回答
1

input返回一个字符串。不是一个整数。你需要先转换它。

于 2012-12-17T01:41:37.907 回答
0
python 3.2

#change this line:
for x in range(2, int(n**0.5) + 1):
于 2012-12-17T02:27:27.373 回答