Цикл не прерывается после перезапуска цикла

Когда ввод помещается в цикл while, который недействителен, он перезапускает функцию. Однако цикл не прерывается после любого ввода после перезапуска функций.

вот программа:

def main():
    type_of_user = input("Are you a student? ")
    while True:
        if type_of_user.lower() == "y":
            print("Your price is $3.50/m")
            break
        elif type_of_user.lower() == "n":
            print("Your price is $5.00/m")
            break
        else:
            print("Not valid")
            main()

Если вы введете y в первый раз, он сработает, и цикл прервется.

  Are you a student? y
  Your price is $3.50/m

если вы вводите n в первый раз, когда он работает, и цикл прерывается:

  Are you a student? n 
  Your price is $5.00/m

если вы вводите неверный ввод в первый раз, цикл никогда не прерывается, даже если ввод равен y или n:

Are you a student? b
Not valid
#now loop continues
Are you a student? y
Your price is $3.50/m
Not valid   #also prints not valid after valid inputs
Are you a student? n 
Your price is $5.00/m
Not valid
Are you a student?

person NRGX    schedule 11.11.2019    source источник


Ответы (1)


Вы вызываете main() внутри предложения else. Если вы введете неверный ответ один раз, а затем правильный ответ, break выйдет из цикла во втором вызове функции, но цикл в первом вызове все еще будет выполняться.

Вместо этого вы должны задать вопрос внутри цикла, чтобы избежать рекурсивного вызова:

def main():
    while True:
        type_of_user = input("Are you a student? ")
        if type_of_user.lower() == "y":
            print("Your price is $3.50/m")
            break
        elif type_of_user.lower() == "n":
            print("Your price is $5.00/m")
            break
        else:
            print("Not valid")
person Patrick Haugh    schedule 11.11.2019