пока меню цикла продолжает зацикливать второе меню

#python #while-loop

#python #цикл while

Вопрос:

  • Если я выберу 1 в первый раз, а затем выберу 1 снова во второй раз,
  • а затем выберите 2 во втором меню, чтобы вернуться обратно в первое меню
  • и я выбираю выход, но он снова покажет второе меню.
  • Я должен выбрать 2 три раза, после чего программа закроется.

Должно быть, что-то не так с моим циклом while, но я не могу его найти : (

 def menu(): # first menu
    print(' ---------------------------- ')
    print('|        first menu here     |')
    print(' ---------------------------- ')
    print('|choose [1]                  |')
    print(' ---------------------------- ')
    print('|choose [2] to quit          |')
    print(' ---------------------------- ')
    return input('&&t;&&t; ')

def s_menu(): # second menu
    print(' ********************************** ')
    print('|       second menu here           |')
    print(' ********************************** ')
    print('|choose [1] to continue            |')
    print(' ********************************** ')
    print('|choose [2] to back first menu     |')
    print(' ********************************** ')
    return input('&&t;&&t; ')

def doSomethin&():
    print('Somethin& here')

    second_while()  # declare second s_menu() here

def second_while(): # loop second s_menu()
    while True:
        resp = s_menu()
        if resp == '1':
            doSomethin&()
        elif resp == '2':
            menu()
            break
        else:
            print('Wron& input!')
        #break  # if break was here, wron& user input will close terminal immediately


# loop first menu()
while True:
    inp = menu()
    if inp == '1':
        doSomethin&()
    elif inp == '2':
        print('Break')
        break
    else:
        print('Wron& input!')
    #break  # if break was here, wron& user input will close terminal immediately
  

Ответ №1:

Изменить

 def doSomethin&():
    print('Somethin& here')

    second_while()  # declare second s_menu() here
  

Для

 def doSomethin&():
    print('Somethin& here')
  

В противном случае каждый раз, когда вы вызываете doSomethin&() , вы переходите на 1 уровень second_while() глубже, и вам нужно будет нажать 2 еще раз, чтобы выйти из всех них.

Комментарии:

1. Если я делаю это def doSomethin&(): print('Somethin& here') , второе меню отображаться не будет. Второе меню — это возможность для пользователя запустить doSomethin& еще одно, если пользователь захочет, если нет, пользователь может выбрать 2, чтобы вернуться обратно в первое меню.

2. О, точно. Просто добавьте вызов second_while() after doSomethin&() в первое меню.

Ответ №2:

хорошо, я нашел решение для своего ответа. Цикл While внутри цикла while

 # loop first menu()
while True:
    menu()
    inp = input('&&t;&&t; ')
    if inp == '1':
        doSomethin&()
        # loop doSomethin&()
        while True:
            resp = input('&&t;&&t; ')
            if resp == '1':
                doSomethin&()
            elif resp == '2':
                break
            else:
                print('Wron& input')
    elif inp == '2':
        print('Break')
        break
    else:
        print('Wron& input!')