Python函数返回错误的d

2024-10-04 05:26:17 发布

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

以下代码在单独文件中引用时返回的数据不正确。当给定的数据与if/else语句不匹配时,它将再次遍历函数,但另一个文件(client类型)中的变量仍然是错误的选择。你知道吗

功能:

def create_client():
    client_type = input()

    if client_type == 'Mickey':
        return 'Mickey'
    elif client_type == 'Jenny':
        return 'Jenny'
    elif client_type == 'McElroy':
        return 'McElroy'
    else:
        create_client()

调用函数:

client_type = functions.create_client()

if client_type == 'Mickey':
    client = functions.client(3, 5, 2)
elif client_type == 'Jenny':
    client = functions.client(5, 2, 3)
elif client_type == 'McElroy':
    client = functions.client(4, 1, 5)
else:
    print('Error on choosing client in function create_client.')

Tags: 文件数据代码clientreturniftypecreate
1条回答
网友
1楼 · 发布于 2024-10-04 05:26:17

你的问题是当你的函数递归时,它什么也不返回。你知道吗

你应该改变

else:
    create_client()

else:
    return create_client()

现在,这不是一个直接的答案,但在这种情况下,您确实不应该使用递归,最好使用循环:

def create_client():
    while True:
        client_type = input()

        if client_type == 'Mickey':
            return 'Mickey'
        elif client_type == 'Jenny':
            return 'Jenny'
        elif client_type == 'McElroy':
            return 'McElroy'

这不会耗尽递归调用堆栈,并节省资源。你知道吗

我甚至会继续使用dict而不是序列if/elif

client_types = {
    'Mickey':  (3, 5, 2),
    'Jenny':   (5, 2, 3),
    'McElroy': (4, 1, 5),
}

然后您可以让代码搜索dict并返回正确的数字:

while True:
    t = input()
    if t in client_types:
        break
client = functions.client(*client_types[t])

相关问题 更多 >