Mientras que el bucle para comprobar la entrada válida del usuario?

El novato de Python aquí, lo siento mucho por lo que estoy seguro de que es una pregunta estúpida, pero parece que no puedo resolver el siguiente desafío en un tutorial que me pide que use un bucle while para verificar la entrada de un usuario válido.

(usando Python2.7)

Aquí está mi código, pero no funciona correctamente:

choice = raw_input('Enjoying the course? (y/n)') student_surveyPromptOn = True while student_surveyPromptOn: if choice != raw_input('Enjoying the course? (y/n)'): print("Sorry, I didn't catch that. Enter again: ") else: student_surveyPromptOn = False 

Lo anterior se imprime a la consola:

 Enjoying the course? (y/n) y Enjoying the course? (y/n) n Sorry, I didn't catch that. Enter again: Enjoying the course? (y/n) x Sorry, I didn't catch that. Enter again: Enjoying the course? (y/n) 

Lo que obviamente no es correcto: el bucle debería finalizar cuando el usuario ingrese ‘y’ o ‘n’, pero no estoy seguro de cómo hacerlo. ¿Qué estoy haciendo mal aquí?

Nota: el desafío requiere que use el operador != Y el loop_condition

Una solución más corta

 while raw_input("Enjoying the course? (y/n) ") not in ('y', 'n'): print("Sorry, I didn't catch that. Enter again:") 

Lo que tu código está haciendo mal

Con respecto a su código, puede agregar algo de impresión de la siguiente manera:

 choice = raw_input("Enjoying the course? (y/n) ") print("choice = " + choice) student_surveyPromptOn = True while student_surveyPromptOn: input = raw_input("Enjoying the course? (y/n) ") print("input = " + input) if choice != input: print("Sorry, I didn't catch that. Enter again:") else: student_surveyPromptOn = False 

Lo anterior imprime:

 Enjoying the course? (y/n) y choice = y Enjoying the course? (y/n) n choice = y input = n Sorry, I didn't catch that. Enter again: Enjoying the course? (y/n) x choice = y input = x Sorry, I didn't catch that. Enter again: Enjoying the course? (y/n) 

Como puede ver, hay un primer paso en su código donde aparece la pregunta y su respuesta inicializa el valor de la choice . Esto es lo que estás haciendo mal.

Una solución con != Y loop_condition

Si tiene que usar el operador != Y el loop_condition , debe codificar:

 student_surveyPromptOn = True while student_surveyPromptOn: choice = raw_input("Enjoying the course? (y/n) ") if choice != 'y' and choice != 'n': print("Sorry, I didn't catch that. Enter again:") else: student_surveyPromptOn = False 

Sin embargo, me parece que tanto la solución de Cyber ​​como mi solución más corta son más elegantes (es decir, más sintéticas).

Puedes usar la condición

 while choice not in ('y', 'n'): choice = raw_input('Enjoying the course? (y/n)') if not choice: print("Sorry, I didn't catch that. Enter again: ") 

La solución muy simple para esto es inicializar alguna variable antes de que comience el bucle:

 choice='' #This means that choice is False now while not choice: choice=input("Enjoying the course? (y/n)") if choice in ("yn") #any set of instructions else: print("Sorry, I didn't catch that. Enter again: ") choice="" 

Lo que significa esta statement condicional es que mientras la variable de elección sea ​​falsa, no tiene ningún valor significa la opción = ” -, luego continúa # con el bucle Si la elección tiene algún valor, entonces continúe con entra en el cuerpo del bucle y verifique el valor para una entrada específica, si la entrada no cumple con el valor requerido, entonces restablezca la variable de elección a un valor Falso nuevamente para continuar, el usuario le pide que ingrese la entrada correcta