Вырваться из l oop - Python - PullRequest
       25

Вырваться из l oop - Python

1 голос
/ 05 февраля 2020

Я пытался поискать в Google и искать на SO, но я не могу понять, почему мой разрыв на второй и последней строчках не выходит за рамки l oop. А еще лучше, я не могу понять, почему l oop также не продолжается. Мое намерение состоит в том, чтобы дать пользователю возможность перейти в главное меню после последнего выбора (в основном это время l oop для выбора меню (что на 1 oop выше того, что я здесь вставил).

Любые предложения? Спасибо заранее. Такое ощущение, что я упустил что-то важное.

#this is going to show how many exercise weapons you need for next magic level
if menuchoice == "4":
    #these functions returns the amount of magic wands/rods that is needed to be spent for next magic level
    print("Select vocation")
    print("Press P for Royal Paladin")

    #ask user to input vocation:
    while True:
        vocationchoice = input()
        if vocationchoice == "P" or vocationchoice == "p":
            #ask user to input magic level for paladin
            num1 = float (input("Enter your magic level: "))

            #ask for own training dummy
            print("Do you have your own exercise dummy? Type Y for yes and N for no.")
            while True:
                trainingdummy = input()
                if trainingdummy == "y" or trainingdummy == "Y":
                    #list the different exercise weapons
                    print("Select exercise weapon:")
                    print("1. Training rod")

                    #loop, where we ask user to input what exercise weapon they want to calculate
                    while True:
                        while True:
                            weaponchoice = input()
                            if weaponchoice == "q":
                                sys.exit() #quit the program
                            if weaponchoice == "1" or weaponchoice == "2" or weaponchoice == "3" or weaponchoice == "f":
                                break #break out of the input loop

                        #User choice
                        if weaponchoice == "1":
                            print("The amount of training rods needed for next magic level is " + str((nextmaglvlpalwithdummy(num1))) + ".")

                if trainingdummy == "n" or trainingdummy == "N":
                    #list the different exercise weapons
                    print("Select exercise weapon:")
                    print("1. Training rod")

                    #loop where ask user to input what exercise weapon they want to calculate
                    while True:
                        weaponchoice = input()
                        #User choice
                        if weaponchoice == "1":
                            print("The amount of training rods needed for next magic level is " + str((nextmaglvlpal(num1))) + ".")

                        elif weaponchoice == "f":
                            break

                        print("\nGo to main menu? Press F.")

Ответы [ 3 ]

1 голос
/ 05 февраля 2020

Это поможет вам, я думаю. Перерыв только разрывы от текущего l oop. Если вы хотите go подняться на уровни, вам нужно отрываться от каждого l oop в отдельности.

A предложение состоит в том, чтобы превратить al oop в функцию и использовать return, который эффективно выйдет из любого l oop. Хотя потребуется немного реорганизации кода.

Если нет, то можете ли вы предоставить дополнительную информацию и, возможно, полный код (есть более высокий l oop, которого мы здесь не видим?)

0 голосов
/ 05 февраля 2020

Во-первых, вы должны напечатать вещи в команде input(), так как она будет очищена с намерением: input("Text to display").

Во-вторых, если вы хотите выйти в главное меню, вам нужно разбить каждое вложенный l oop. Здесь вы разбиваете только самые внутренние l oop.

Так как в Python нет ни инструкции goto, ни именованных циклов, вы можете использовать флаг. Флаг устанавливается в true, когда используемые нажимают «F», и этот флаг затем используется в начале каждого внешнего вложенного l oop, чтобы разбить их. Это может выглядеть так:

while True: # This is your menu loop
  menuFlag = False # Declare and set the flag to False here

  menu = input("Choose the menu: ")
  # ...

  while True: # Choose character loop
    if menuFlag: break  # Do not forget to break all outer loops   

    character = input("Choose a character: ")
    # ...

    while True: # Any other loop (choose weapon, ...)
        weapon = input("Choose weapon: ")

        # Here you want to return to the menu if f is pressed
        # Set the flag to True in this condition
        if weapon == "f":
            menuFlag = True
            break

В вашей игре это выглядит так:

goToMainMenu = False

while True:
    if goToMainMenu: break
    vocationchoice = input("Select vocation.\nPress P for Royal Paladin: ")

    if vocationchoice == "P" or vocationchoice == "p":
        #ask user to input magic level for paladin
        num1 = float (input("Enter your magic level: "))

        #ask for own training dummy
        while True:
            if goToMainMenu: break

            trainingdummy = input("Do you have your own exercise dummy?\nType Y for yes and N for no: ")
            if trainingdummy == "y" or trainingdummy == "Y":
                #loop, where we ask user to input what exercise weapon they want to calculate
                while True:
                    while True:
                        weaponchoice = input("Select exercise weapon:\n1. Training rod: ")
                        if weaponchoice == "q":
                            sys.exit() #quit the program
                        if weaponchoice == "1" or weaponchoice == "2" or weaponchoice == "3" or weaponchoice == "f":
                            break #break out of the input loop

                    #User choice
                    if weaponchoice == "1":
                        print("The amount of training rods needed for next magic level is " + str((nextmaglvlpalwithdummy(num1))) + ".")

            if trainingdummy == "n" or trainingdummy == "N":
                #list the different exercise weapon

                #loop where ask user to input what exercise weapon they want to calculate
                while True:
                    weaponchoice = input("Select exercise weapon (press F for main menu):\n1. Training rod: ")
                    #User choice
                    if weaponchoice == "1":
                        print("The amount of training rods needed for next magic level is " + str((nextmaglvlpalwithdummy(num1))) + ".")

                    elif weaponchoice == "f" or weaponchoice == "F":
                        goToMainMenu = True
                        break
0 голосов
/ 05 февраля 2020

Добавьте break для weaponchoice == "1", чтобы выйти из l oop.

...