2011-11-13 22 views
5

Sto cercando di scrivere un programma di indovinare numero come segue:loop fino a quando un utente specifico ingresso

def oracle(): 
n = ' ' 
print 'Start number = 50' 
guess = 50 #Sets 50 as a starting number 
n = raw_input("\n\nTrue, False or Correct?: ") 
while True: 
    if n == 'True': 
     guess = guess + int(guess/5) 
     print 
     print 'What about',guess, '?' 
     break 
    elif n == 'False': 
     guess = guess - int(guess/5) 
     print 
     print 'What about',guess, '?' 
     break 
    elif n == 'Correct': 
     print 'Success!, your number is approximately equal to:', guess 

Oracle()

Quello che sto cercando di fare ora è ottenere questa sequenza di if/elif/else i comandi eseguono il ciclo fino a quando l'utente immette 'Correct', ovvero quando il numero dichiarato dal programma è approssimativamente uguale al numero degli utenti, tuttavia se non conosco il numero degli utenti non riesco a pensare a come potrei implementare e se l'istruzione, e anche i miei tentativi di usare "while" non funzionano.

risposta

10

In alternativa al metodo @ Mark Byers', è possibile utilizzare while True:

guess = 50  # this should be outside the loop, I think 
while True: # infinite loop 
    n = raw_input("\n\nTrue, False or Correct?: ") 
    if n == "Correct": 
     break # stops the loop 
    elif n == "True": 
     # etc. 
+0

+1 simile al mio aggiornamento. Penso che anche l'uso di "input" qui sia sbagliato. –

+0

@MarkByers: cambiato in 'raw_input'. Dall'aspetto delle istruzioni 'print', l'OP sta usando Python 2. –

+0

Qualcuno di voi potrebbe dirmi perché il codice termina dopo aver inserito True o False? –

2

Il codice non funziona perché non è stato assegnato nulla a n prima del primo utilizzo. Prova questo:

def oracle(): 
    n = None 
    while n != 'Correct': 
     # etc... 

Un approccio più leggibile è quello di spostare il test a più tardi e utilizzare un break:

def oracle(): 
    guess = 50 

    while True: 
     print 'Current number = {0}'.format(guess) 
     n = raw_input("lower, higher or stop?: ") 
     if n == 'stop': 
      break 
     # etc... 

anche input in Python 2.x legge una riga di input e poi valuta le esso. Si desidera utilizzare raw_input.

Nota: in Python 3.x, raw_input è stato rinominato input e il vecchio metodo input non esiste più.

+0

+1, anche se sarebbe più divinatorio di utilizzare 'none' per indicare 'nessun valore'. –

+0

Qualcuno di voi potrebbe dirmi perché il codice termina dopo aver inserito True o False? –

Problemi correlati