2011-11-13 15 views
5

Estoy tratando de escribir un programa de adivinar el número de la siguiente manera:bucle hasta que un usuario específico de entrada

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()

Lo que estoy tratando de hacer ahora es conseguir esta secuencia de si/elif/else comandos de bucle hasta que el usuario ingrese 'Corregir', es decir, cuando el número indicado por el programa es aproximadamente igual al número de usuarios, sin embargo, si no sé el número de usuarios no puedo pensar cómo podría implementar y si la declaración, y mis intentos de usar 'while' tampoco funcionan.

Respuesta

10

Como alternativa al enfoque @ Marcos Byers, puede utilizar 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 similar a mi actualización. Creo que el uso de 'input' aquí también es incorrecto. –

+0

@MarkByers: lo cambié a 'raw_input'. Desde el aspecto de las declaraciones 'print', el OP está usando Python 2. –

+0

¿Podría alguno de ustedes decirme por qué el código ahora termina luego de ingresar True o False? –

2

Su código no funcionará porque no ha asignado nada al n antes de usarlo por primera vez. Prueba esto:

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

Un enfoque más legible es pasar la prueba hasta más tarde y utilizar 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... 

también input en Python 2.x lee una línea de entrada y luego evalúa eso. Desea usar raw_input.

Nota: En Python 3.x, raw_input se ha cambiado el nombre a input y el antiguo método input ya no existe.

+0

+1, aunque sería más Pythonic usar 'None' para denotar 'ningún valor'. –

+0

¿Alguno de ustedes podría decirme por qué el código ahora termina luego de ingresar True o False? –

Cuestiones relacionadas