我有代码:
#!/usr/bin/env python
import math
i = 2
isprime = True
n = input("Enter a number: ")
while i <= math.sqrt(n):
i += 1
if n % i == 0:
isprime = False
if isprime == False:
print("Not Prime")
else:
print("It's Prime!")
除了平方根部分外,一切都有效。获取错误:TypeError:需要浮点数。我改变了i&lt; = to while float(i)&lt; =,但是没有修复错误!我该怎么办?
答案 0 :(得分:2)
input(...)
返回一个字符串。您正尝试使用sqrt("of a string")
。请改用int(input("Enter a number: "))
。
即使您声称将python2与#!/usr/bin/env python
一起使用,请确保python
实际上是python2。您只需输入以下内容即可查看:
/usr/bin/env python
在终端中查看版本号,例如:
% /usr/bin/env python
Python 2.7.2 (default, ...
...
如果设置为Python 3.x,则系统管理员会遇到此问题。 不应该,应立即更改。必须使用python3
调用Python3程序;这个“tweak”将破坏当前Linux系统上的任何python2程序。
显然input
相当于eval(raw_input(...))
因此可以在python2中工作,但不会在python3中工作。:
% python2
Python 2.7.2 (default, Aug 19 2011, 20:41:43) [GCC] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> type(input())
5
<type 'int'>
>>>
对战:
% python3
Python 3.2.1 (default, Jul 18 2011, 16:24:40) [GCC] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> type(input())
5
<class 'str'>
>>>
答案 1 :(得分:1)
我认为您正在使用Python3
。在python3 input returns string。
>>> x = input()
2
>>> type(x)
<class 'str'>
>>> math.sqrt(x)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: a float is required
将string
类型转换为float
,它应该可以正常工作。
>>> math.sqrt(float(x))
1.4142135623730951
>>>