La mia domanda è: perché queste espressioni sono false?
Python 2.6.4 (r264:75706, Dec 7 2009, 18:45:15)
[GCC 4.4.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> num = raw_input("Choose a number: ")
Choose a number: 5
>>> print num
5
>>> print ( num < 18 )
False
>>> print ( num == 5 )
False
Perché se provo questo:
>>> print ( num > 0 )
True
L'espressione funziona bene.
risposte:
9 per risposta № 1Questa dichiarazione:
num = raw_input("Choose a number: ")
fa num
un stringa, non un numero, nonostante il nome fuorviante. Accade così che Python 2 ti permetta di confrontare stringhe con numeri e nella tua versione considera tutte le stringhe più grandi di tutti i numeri (il contenuto della stringa non gioca alcun ruolo).
Uso num = int(num)
per fare un numero intero (e assicurati di usare un tentativo / salvo per rilevare possibili errori quando l'utente ha digitato qualcosa di diverso da un numero!) prima di iniziare il confronto.
(In Python 3, il nome della funzione cambia da raw_input
a input
e restituisce ancora stringhe; tuttavia in Python 3 il confronto di una stringa con un numero è considerato un errore, quindi si otterrebbe un'eccezione anziché True
o False
in ciascuno dei tuoi tentativi di confronto).
3 per risposta № 2
La variabile num
non contiene effettivamente il numero 5
; contiene la stringa "5"
. Poiché Python è fortemente tipizzato, 5 == "5"
è False
. Prova prima a convertirlo in un numero intero:
>>> print (int(num) < 18)
True
2 per risposta № 3
num
è una stringa. Non puoi confrontare significativamente una stringa con un numero intero e una stringa non è mai uguale a un numero intero (quindi == restituisce false e <
e >
restituire quello che vogliono). Il motivo è quello <
e >
non generare un errore (prima di Python 3) quando si confrontano stringhe e numeri interi per poter ordinare elenchi eterogenei.
1 per risposta № 4
Provare num = float(raw_input("Choose..."))
Stai valutando una stringa nelle tue espressioni booleane.