我正在使用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]
答案 0 :(得分:1)
您的列表Ax
等已在函数内初始化为空白。
这意味着每次调用该函数时,列表都会重新实例化为空白。
您需要将列表移出函数,请参阅此处:
Ax=[]
Bx=[]
Cx=[]
Dx=[]
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():
input=raw_input("Answer: ")
if input=='A':
Ax+=[1]
if input=='B':
Bx+=[1]
if input=='C':
Cx+=[1]
if input=='D':
Dx+=[1]
这应该可以正常工作。
答案 1 :(得分:1)
因为Ax,Bx等是函数的局部变量,所以每次调用函数时基本上都会得到一组新的变量。
作为一个肮脏的技巧,你可以将它们声明为全局变量。
答案 2 :(得分:0)
问题是您在count_answers(Ax
,Bx
,Cx
,Dx
中定义的变量不会在对函数的不同调用中持续存在。< / p>
换句话说,每次调用函数时,变量都会被实例化,即 - 正在创建新列表。
这不是特定于python的 - 它发生在大多数编程语言中。
通过展开对函数的调用,你可以更直观地理解它:只需在思想上用函数的代码替换对函数的每一次调用,你就会得到变量初始化两次,并且不保留它们的状态 - 值不要加起来。
要解决此问题,您需要确保仅创建一次变量。一种方法是在spongebob_quiz中创建变量,并将它们作为参数传递给count_answers。 count_answers作为回报只会更新变量。它不会初始化它们。它们只会被初始化一次。
P.S:
如果你想更精确,真正发生的是一旦函数的执行结束,它内部定义的所有变量都将被删除。你无法访问它们(除非你使用更高级的范例,比如闭包。但是让我们保持简单:)