Float Bug auf Quadratwurzel Funktion Python

Ich habe den Code:

#!/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!") 

Und alles funktioniert neben dem Quadratwurzelteil. Fehler bekommen: TypeError: ein float ist erforderlich. Ich änderte mich, während ich <= bis float (i) <=, aber das hat den Fehler nicht beendet! Was mache ich?

2 Solutions collect form web for “Float Bug auf Quadratwurzel Funktion Python”

input(...) gibt einen String zurück. Sie versuchen, die sqrt("of a string") . Verwenden Sie int(input("Enter a number: ")) stattdessen.

Auch wenn Sie behaupten, python2 mit #!/usr/bin/env python zu benutzen, stellen Sie sicher, dass python tatsächlich python2 ist. Sie können dies durch einfaches Tippen überprüfen:

 /usr/bin/env python 

In einem Terminal und Blick auf die Versionsnummer, zB:

 % /usr/bin/env python Python 2.7.2 (default, ... ... 

Wenn es auf Python 3.x gesetzt ist, ist dies ein Problem mit Ihrem Systemadministrator. Dies sollte nicht geschehen und sollte sofort geändert werden. Python3-Programme müssen mit python3 aufgerufen python3 ; Diese "tweak" wird alle python2-Programme auf dem aktuellen Linux-System brechen.


Scheinbar input ist gleichbedeutend mit eval(raw_input(...)) so würde in python2 funktionieren, aber würde nicht in 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'> >>> 

Gegen:

 % 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'> >>> 

Ich denke, du benutzt Python3 . In python3- Eingabe gibt String zurück .

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

Typ-Cast- string zu float und es sollte gut funktionieren.

 >>> math.sqrt(float(x)) 1.4142135623730951 >>> 
Python ist die beste Programmiersprache der Welt.