为什么函数调用在python字典中不起作用

2024-09-26 04:43:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在调用字典中的函数。在下面的代码中,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()

Tags: inputgetdefexitloginoutleftselect
2条回答

如果要执行类似操作,则需要传递对函数的引用,而不是调用函数的结果。然后,您可以在进行选择时查看这些功能。例如:

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)() 

您没有调用用户选择的函数。您将立即调用这两个函数,并将它们的返回值放入字典中

当你调用select.get()时,你递归调用menu(),没有任何终止条件

您需要将函数放入字典,而不是它们的返回值。然后调用select.get()返回的内容

由于input()返回一个字符串,因此需要使用字符串作为字典中的键

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

相关问题 更多 >