平方根函数Python上的浮点错误

时间:2012-02-28 17:19:31

标签: python

我有代码:

#!/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; =,但是没有修复错误!我该怎么办?

2 个答案:

答案 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
>>>