2015-09-02 8 views
-3

python, s'il vous plaît aider. Je veux que ce code demande à quelqu'un s'il est d'accord avec la note. s'ils disent oui, ça imprime bien! s'ils disent non, ça dit bien! Si elles ne disent pas oui ou non, je veux imprimer "s'il vous plaît entrez oui ou non" et continuez à leur demander jusqu'à ce qu'ils finissent par dire oui ou non. Voilà ce que j'ai jusqu'à présent et quand je le lance et à ne tapez oui ou non, il Spams « s'il vous plaît entrer oui ou non » des millions de tempspython, s'il vous plaît dites-moi ce qui est mal

theanswer= raw_input("Are you ok with that grade?") 
while theanswer: 
    if theanswer == ("yes"): 
     print ("good!") 
     break 
    elif theanswer == ("no"): 
     print ("oh well") 
     break 
    else: 
     print "enter yes or no" 

Que dois-je faire pour que cela fonctionne, ive essayé beaucoup

+0

Vérifiez l'endroit où vous modifiez 'theanswer' dans la boucle ... – molbdnilo

+0

je ne l'édite pas, je ne sais pas Si je l'ai fait, pourrais-tu me le dire? –

+1

Exactement. Alors quelle est la valeur de 'theanswer' sur la prochaine itération? – molbdnilo

Répondre

7

Vous devez avoir un appel de blocage dans votre instruction else. Sinon, vous aurez une boucle infinie car theanswer sera toujours vrai. Comme pour demander l'entrée:

theanswer= raw_input("Are you ok with that grade?") 
while theanswer: 
    if theanswer == ("yes"): 
     print ("good!") 
     break 
    elif theanswer == ("no"): 
     print ("oh well") 
     break 
    else: 
     theanswer= raw_input("Please enter yes or no") 

Voici une bonne resorce sur Blocking vs Non-Blocking I/O. C'est un élément fondamental important dans toute application.

+0

@EvanWestphal s'il vous plaît essayer et prendre cela comme une expérience d'apprentissage. Voici une bonne ressource sur [Blocking vs Non-Blocking I/O] (http://stackoverflow.com/questions/1241429/blocking-io-vs-non-blocking-io-looking-for-good-articles). Il sera bon de comprendre la différence dans une future carrière de codage :) – asdf

+0

@EvanWestphal Aussi, si cela a fonctionné pour vous, s'il vous plaît sélectionnez-le comme la solution acceptée :) – asdf

1

Fondamentalement dans votre code vous avez une boucle en cours d'exécution qui ne se cassera que si theanswer == oui ou == non. Vous ne donnez pas non plus la possibilité de changer la valeur de par exemple dans votre boucle donc => boucle infini.

ajouter à votre code:

else: 

     print "enter yes or no" 
     theanswer= raw_input("Are you ok with that grade?") 
+0

merci beaucoup! –

0

Ceci peut être accompli avec récursion

def get_user_input(text): 
    theanswer= raw_input(text) 
    if theanswer == 'yes': 
     print('good!') 
    elif theanswer == ("no"): 
     print('oh well') 
    else: 
     get_user_input('enter yes or no') 

get_user_input('Are you ok with that grade?') 
+0

J'aime la solution récursive, beaucoup plus sûre qu'une boucle en ligne. – asdf

3

ou ce (ce qui sépare la logique d'entrée de ce que vous faites avec la réponse):

theanswer = raw_input("Are you ok with that grade?") 
while theanswer not in ('yes', 'no'): 
    theanswer = raw_input('Please enter yes or no') 

if theanswer == "yes": 
    print("good!") 
elif theanswer == "no": 
    print("oh well") 
+0

Vous manquez la question initiale de '" Êtes-vous d'accord avec votre note? "' – asdf

+0

ok, mis à jour .... –