2013-05-28 7 views
1

Je suis en train d'apprendre Python et peut, pour la vie de celui-ci, pas comprendre, pourquoi ceci:Python pourquoi ne int ("0") return false

i = raw_input("enter a number") 

if int(i): 
    print "yes" 
else: 
    print "false" 

ne retourne vrai si i = = "0"

Contexte: Je suis en train de mettre en œuvre l'Union Trouver algorithme. Tout fonctionne très bien, mais lorsque je tente de relier deux points et un est égal à 0, il ne me laisse pas par le contrôle. (Python 2.7)

+2

Lire [this] (http://docs.python.org/release/2.5.2/lib/truth.html) –

+0

Que vérifiez-vous exactement lorsque vous "essayez de connecter deux points"? – Elazar

+0

je construisais une Union Trouver algorithme –

Répondre

4

Les types Python ont une valeur booléenne, définie special methods. en particulier, 0, None, False, "" (et toute autre séquence vide) sont fausses.

De toute évidence,

>>> int("0") 
0 

Qui plus est, la valeur de False est 0, et la valeur de True est 1, pour la plupart des cas (sauf pour leur représentation sous forme de chaînes, et leur type, qui est bool) :

>>> 0 == False 
True 
+0

Merci. Bien que le crépuscule ait eu la bonne manière de résoudre le problème, vous avez répondu à la question. –

2

Parce que 0 est falsy, tout comme None, [], {} et False (un Et quelques objets de plus). Il est faux pas explicitement, mais il évalue à False lorsqu'il est utilisé comme condition.

Si vous voulez vérifier que i est un nombre, on suppose qu'il est un numéro:

try: 
    n = int(i) 
    print "That's a number" 
except ValueError: 
    print "That's not a number" 
3

Je pense que vous vouliez dire i.isdigit() au lieu de int(i).

+0

oui, mon processus de pensée était: s'il est possible de vous convertir en un entier, permet de passer ensuite. Mais à cause de la réponse d'Elazar, je sais maintenant pourquoi c'était la mauvaise approche. –

Questions connexes