python остальное: ничего не делать - PullRequest
0 голосов
/ 09 марта 2020

Я бы хотел, чтобы моя программа ничего не имела, если пользователь выбирает опцию в меню, которое не существует.

def mainMenu():
    os.system("clear")
    print("menu")
    print("1 - option 1")
    print("2 - option 2")   
    selection=str(raw_input(""))
    if selection=='1':
        some super-interesting things
    if selection=='2':
        Kim Kardashian with Eskimo riding a polar bear
    else: 
        literally DO NOTHING, no changes, no exiting the program, just takes the input and waits for another command
mainMenu()

Как этого добиться? 'pass' или 'return' вызывает выход из программы. 'mainMenu ()' вызывает обновление меню "страница"

Ответы [ 3 ]

3 голосов
/ 09 марта 2020

Я бы просто использовал al oop, который продолжает ждать правильного ввода. Он запрашивает ввод, и если это не одна из допустимых опций, он будет продолжать ждать ввода.

def mainMenu():
    os.system("clear")
    print("menu")
    print("1 - option 1")
    print("2 - option 2")

    valid_options = ['1', '2']
    while True:
        selection = str(raw_input(""))
        if selection in valid_options:
            break

    if selection == '1':
        some super-interesting things
    elif selection == '2':
        Kim Kardashian with Eskimo riding a polar bear

mainMenu()

Вы можете даже добавить оператор else в if внутри l oop, чтобы запросить у пользователя запрос допустимая опция.

0 голосов
/ 09 марта 2020

Оператор «pass» или «return» на самом деле не «выходит из программы», он выходит из функции. Теперь, поскольку в вашей программе больше ничего нет, она также завершает работу программы, но это не само по себе из-за этих утверждений.

Если ваша цель - перезапустить функцию mainMenu, когда выбор не 1 или 2, вам нужно все oop:

def mainMenu():
    while True:
        os.system("clear")
        print("menu")
        print("1 - option 1")
        print("2 - option 2")   

        # you need to leave a way for the user
        # to exit the program
        print("0 - exit")

        # raw_input already returns a string, 
        # but you may want to remove unwanted whitespace chars
        selection = raw_input("").strip()

        if selection == '0':
            return

        elif selection == '1':
            some_super_interesting_things()

        elif selection == '2':
            KimKardashian().with(Eskimo()).riding(a_polar_bear)

        else:
            # no strictly needed but the users will appreciate...  
            print("sorry, {} is not a valid choice".format(selection))


# this prevents this code from being executed if you
# try to import your script as a module

if __name__ == "__main__":
    mainMenu()
0 голосов
/ 09 марта 2020

Стирание оператора else должно сработать:

def mainMenu():
    os.system("clear")
    print("menu")
    print("1 - option 1")
    print("2 - option 2")   
    selection=str(raw_input(""))
    if selection=='1':
        some super-interesting things
    if selection=='2':
        Kim Kardashian with Eskimo riding a polar bear
mainMenu()

В любом случае, я понимаю, что это далеко от окончательного кода, очевидно, кода внутри, если условия не будут работать. Если вы хотите, чтобы код запрашивал снова, он должен быть внутри al oop, в противном случае программа завершится. Это должно выглядеть так:

def mainMenu():
    os.system("clear")
    print("menu")
    print("1 - option 1")
    print("2 - option 2")
    selection = '0'
    while selection != '1' or selection !='2':
        selection=str(raw_input(""))
    if selection=='1':
        some super-interesting things
    if selection=='2':
        Kim Kardashian with Eskimo riding a polar bear
mainMenu()
...