python上的简单测验函数

时间:2017-03-19 20:29:57

标签: python

我正在使用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]

3 个答案:

答案 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(AxBxCxDx中定义的变量不会在对函数的不同调用中持续存在。< / p>

换句话说,每次调用函数时,变量都会被实例化,即 - 正在创建新列表。

这不是特定于python的 - 它发生在大多数编程语言中。

通过展开对函数的调用,你可以更直观地理解它:只需在思想上用函数的代码替换对函数的每一次调用,你就会得到变量初始化两次,并且不保留它们的状态 - 值不要加起来。

要解决此问题,您需要确保仅创建一次变量。一种方法是在spongebob_quiz中创建变量,并将它们作为参数传递给count_answers。 count_answers作为回报只会更新变量。它不会初始化它们。它们只会被初始化一次。

P.S:

如果你想更精确,真正发生的是一旦函数的执行结束,它内部定义的所有变量都将被删除。你无法访问它们(除非你使用更高级的范例,比如闭包。但是让我们保持简单:)