Почему вызов функции не работает в python в словаре - PullRequest
1 голос
/ 12 марта 2020

Я вызываю функцию в словаре. В приведенном ниже коде select.get не работает должным образом. Если inum = 2, он все равно будет выполнять login().

. Любая помощь в поиске, где проблема приветствуется!

def menu():
    print("Choose\n1.Log in\n2.Exit")
    inum = input()
    select = {
        1: login(),
        2: exit(),
    }
    select.get(inum, menu())


def login():
    guess = ""
    acct = "12345"
    oog = 3
    out = 0
    while guess != acct:
        if oog == out:
            print("no trys left")
            input()
            exit()

        print((str(oog)) + "trys left " + "\nEnter Password here: ")
        guess = input()
        oog = oog - 1

menu()

Ответы [ 2 ]

1 голос
/ 12 марта 2020

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

И вы вызываете menu() рекурсивно без каких-либо условий завершения при вызове select.get().

You нужно поместить функции в словарь, а не их возвращаемые значения. Затем вызовите то, что возвращает select.get().

И поскольку input() возвращает строку, вам необходимо использовать строки в качестве ключей в словаре.

def menu():
    print("Choose\n1.Log in\n2.Exit")
    inum = input()
    select = {
        '1': login,
        '2': exit,
    }
    select.get(inum, menu)()
0 голосов
/ 12 марта 2020

Если вы хотите сделать что-то подобное, вам нужно передать ссылки на функции, а не результаты вызова функций. Затем вы можете функции, когда выбор сделан. Например:

def menu():
    inum = input("Choose\n1.Log in\n2.Exit\n")
    select = {
        '1': login,
        '2': exit,
    }

    # decide which function and call it with ()
    select.get(inum, menu)() 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...