我正在做一个关于Python的海绵宝宝测验,我遇到了一些问题。我的计划是把每个答案被选中的次数加起来,然后根据哪个和是最大的,显示一个结果。当我测试它是否有效时,在选择了两个A答案后,Ax列表的和显示为1而不是2。由于某些原因,count_answers函数没有考虑以前的输入。有什么办法解决这个问题吗?我是一个真正的初学者编码器,我将感谢任何帮助。谢谢!在
def spongebob_quiz():
print "Which character from Spongebob are you?"
print "Question 1: Pick a word"
print "A. Wumbo"
print "B. CHOCOLATE"
print "C. Weast"
print "D. Hoopla"
count_answers()
print "Question 2: Is mayonnaise an instrument?"
print "A. CORRECT!"
print "B. Yes"
print "C. No"
print "D. Maybe"
count_answers()
def count_answers():
Ax=[]
Bx=[]
Cx=[]
Dx=[]
input=raw_input("Answer: ")
if input=='A':
Ax+=[1]
if input=='B':
Bx+=[1]
if input=='C':
Cx+=[1]
if input=='D':
Dx+=[1]
问题是您在count_答案中定义的变量(
Ax
,Bx
,Cx
,Dx
)在对函数的不同调用中不存在。在换句话说,每次调用函数时,变量都会被实例化,也就是说,正在创建新的列表。在
这并不是python特有的,它发生在大多数编程语言中。在
通过展开对函数的调用,您可以更好地直观地理解它:只需在精神上用函数的代码替换对函数的每次调用,就会发现变量被初始化两次,并且它们的状态不会被保留-值不会相加。在
要解决这个问题,您需要确保只创建一次变量。一种方法是在海绵宝宝测验中创建变量,并将它们作为参数传递,以计算答案。count_的回答只会更新变量。它不会初始化它们。它们只初始化一次。在
备注:
如果你想更精确一点,真正发生的是,一旦一个函数的执行结束,它内部定义的所有变量都会被删除。您无法访问它们(除非您使用更高级的范例,例如闭包)。但让我们简单点:)
您的列表
Ax
等在函数中初始化为空白。在这意味着每次调用函数时,列表都被重新实例化为空。在
您需要将列表移出函数,请参见此处:
这应该行得通。在
因为Ax、Bx等都是函数的局部变量,所以每次调用函数时都会得到一组新的变量。在
作为一个肮脏的伎俩,你可以将它们声明为全局变量。在
相关问题 更多 >
编程相关推荐