显示错误--->在赋值之前引用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
答案 0 :(得分:2)
您正在使用递归,您应该使用while
循环。
当用户选择yes
或no
(或其变体)以外的内容时,您最终会进入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()
再次被要求提出有效答案。