/ / Perché questa espressione logica in Python è falsa? - pitone, espressione

Perché questa espressione logica è in python False? - python, espressione

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

Questa 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 inpute 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.