2010-12-25 9 views
8

ho erroneamente scritto questo codice in Python:Qual è il valore logico di "string" in Python?

name = input("what is your name?") 
if name == "Kamran" or "Samaneh": 
    print("That is a nice name") 
else: 
    print("You have a boring name ;)") 

Esso stampa sempre fuori "Questo è un bel nome", anche quando l'ingresso non è né "Kamran" né "Samaneh".

Sono corretto nel dire che considera "Samaneh" come un vero? Perché?

A proposito, ho già notato il mio errore. La forma corretta è:

if name == "Kamran" or name == "Samaneh": 

risposta

9

Qualsiasi stringa non vuota in Python (e nella maggior parte delle altre lingue) è vera così come tutti i numeri non nulli e le liste non vuote, i dizionari, i set e le tuple.

un modo migliore per fare quello che vuoi è:

name = input("what is your name?") 
if name in ("Kamran", "Samaneh"): 
    print("That is a nice name") 
else: 
    print("You have a boring name ;)") 

Questo crea una tupla contenente i nomi che si desidera ed esegue un test di appartenenza.

1 Come sottolinea delnan nei commenti, questo vale per tutte le collezioni ben scritte. Cioè, se implementi una classe di raccolta personalizzata, assicurati che sia falsa quando è vuota.

+0

Non solo liste, tuple e dicts - * tutte le collezioni vuote * (se ben scritto). – delnan

+0

@delnan, stavo cercando di pensare a un buon modo per dirlo, quindi mi sono attenuto ai built-in e ho dimenticato i set. – aaronasterling

+0

La maggior parte degli oggetti, raccolta o altro, sono veritieri; solo quelli che sono esplicitamente definiti altrimenti non lo sono. Se si definisce una classe con 'class C(): pass', le istanze testeranno come' True'. –

0

Una stringa non vuota è Vero, sì. Uno vuoto è Falso. Questo è super pratico.

2

In Python una stringa vuota è considerata False, True in caso contrario.

è possibile utilizzare il in operatore:.

if name in ("Kamran","Samaneh"): 
    print("That is a nice name") 
else: 
    print("You have a boring name ;)") 
6

Oltre alla stringa vuota '', stringhe saranno tutti di valutare per True (vedi this page for a full list of values of all types that evaluate to False Questo segue la logica di molti altri linguaggi di programmazione (ad eccezione di alcuni che valutano anche le stringhe come '0', 'false', ecc. a False). La decisione esatta su cosa fare è in qualche modo arbitraria, ma la scelta fatta può essere spiegata come permettere al cast di essere usato come un modo semplice per testare vuoto (predefinito o non popolato) stringhe

È sempre possibile forzare un cast di qualsiasi tipo a bool utilizzando la funzione bool().

>>> bool('') 
False 
>>> bool('non-empty string') 
True 
>>> bool('0') 
True 
>>> bool('False') 
True 
>>> bool('false') 
True 
+0

Grazie per aver menzionato la funzione bool(). Ho davvero bisogno di una cosa del genere :) –

+0

@Kamran Li ho aiutati :) – marcog

-2

Evidentemente, deve essere:

name = raw_input("what is your name?") 

non

name = input("what is your name?") 

.

Quello che hai scritto è come:

if (name == "Kamran" or "Samaneh") 

Un'altra buona espressione è:

if name == ("Kamran" or "Samaneh") 

Ma anche preferire se il nome in ("Kamran" o "Samaneh"), come già mostrato

.

Tra l'altro, si può scrivere:

print("That is a nice name" if raw_input("what is your name?") in ("Kamran","Samaneh") 
     else "You have a boring name ;)") 
+2

Non c'è 'raw_input' in Python3 e' if name == ("Kamran" o "Samaneh") 'è semplicemente sbagliato come' if (name = = "Kamran" o "Samaneh") '. – Kabie

+0

Ho testato il nome == ("Kamran" o "Samaneh"). Quando inserisco "Samaneh" mi dà "Hai un nome noioso;)" che non è corretto. –

+0

Non capisco assolutamente perché ho postato una risposta così falsa e stupida. Nonostante il fatto che avevo studiato questa questione di catene considerate booleane in Python qualche tempo fa, e pensavo di aver capito bene la cosa, mi sono completamente rovinato. – eyquem

Problemi correlati