python函数显示 - >当ans为1st而不是y或n时,add_charge未定义

时间:2015-11-09 19:44:05

标签: python if-statement conditional

显示错误--->在赋值之前引用add_charge 当ans的初始值不是" y"或" n"

  

功能 选择(ans) ---->根据输入用户分配add_charge(附加费用)   给

def  choice(ans):
    if ans == "Y" or ans =="y" or ans == "Yes" or ans == "yes":
        add_charge = 100
    elif ans == "N" or ans =="n"or ans =="No"or ans =="no":
        add_charge = 0
    else:
        ans = f_ans() # if ans is other then y or n, ask user again and assign value
        choice(ans)

    return add_charge

1 个答案:

答案 0 :(得分:2)

您正在使用递归,您应该使用while循环。

当用户选择yesno(或其变体)以外的内容时,您最终会进入else分支并致电choice()。该函数调用最终返回,此时add_charge未设置。

您可以通过指定返回值来“修复”该问题:

else:
    ans = f_ans() # if ans is other then y or n, ask user again and assign value
    add_charge = choice(ans)

但你应该在这里使用循环;这样你就不会遇到命名空间问题,也不会用完堆栈。所需要的只是持有ENTER键的人遇到最大递归限制。

您可以使用str.lower()和设置成员资格测试来简化测试:

def choice():
    while True:
        ans = f_ans()
        if ans.lower() in {'y', 'yes'}:
            return 100
        elif ans.lower() in {'n', 'no'}:
            return 0

return语句将退出该函数,但如果两个分支都不满足(用户提供的内容不是有效答案),while循环将返回到顶部f_ans()再次被要求提出有效答案。