2011-12-26 2 views
1

J'apprends Python en ce moment et j'ai rencontré un problème. Observer ce code:Python 2.7.2 si/ou comportement inattendu

while 1: 
    print "How many lines do you want to add to this file?" 

    number_of_lines = raw_input(">").strip() 

    if not(number_of_lines.isdigit()) or number_of_lines > 10: 
     print "Please try a number between 1 and 10 inclusive." 
     continue 

Le code demande à un utilisateur pour un certain nombre, et vérifie sa validité. Cependant pour une raison quelconque, le code affiche toujours l'erreur, même si l'utilisateur entre un nombre valide inférieur à 10.

J'ai probablement fait une petite erreur quelque part mais je ne peux pas comprendre ... étant un python novice!

J'espère que vous pouvez aider! Merci d'avance.

+0

FYI en général, vous devriez utiliser 'try ... except': le slogan est EAFP pas LBYL. – katrielalex

+0

@katrielalex Merci, je vais considérer cela à l'avenir, mais je ne suis pas si loin dans le moment. – Kieran

Répondre

5

Lorsqu'elle est renvoyée par raw_input, votre variable number_of_lines est une chaîne . Vous devez le convertir en un entier avant de comparer avec 10:

not(number_of_lines.isdigit()) or int(number_of_lines) > 10 
+0

Merci, cette solution fonctionne et c'est exactement ce que je recherchais! – Kieran

3

Je vais essayer de convertir la chaîne en un entier premier, attraper l'erreur si l'on met dans quelque chose d'autre. Cela vous permet également de laisser tomber l'appel isdigit. Comme si:

while 1: 
    print "How many lines do you want to add to this file?" 

    try: 
     number_of_lines = int(raw_input(">").strip()) 
    except ValueError: 
     print "Please input a valid number." 
     continue 

    if number_of_lines > 10: 
     print "Please try a number between 1 and 10 inclusive." 
     continue 
+0

Merci pour votre réponse. Je vais considérer cela la prochaine fois mais je voulais éviter d'essayer/sauf parce que je suis encore un novice et que je n'ai pas encore été aussi loin! J'ai cependant voté pour votre réponse. – Kieran