python上的简单测验函数

2024-04-20 12:58:43 发布

您现在位置: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]

Tags: 答案inputifdefcountax次数计划
3条回答

问题是您在count_答案中定义的变量(AxBxCxDx)在对函数的不同调用中不存在。在

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

这并不是python特有的,它发生在大多数编程语言中。在

通过展开对函数的调用,您可以更好地直观地理解它:只需在精神上用函数的代码替换对函数的每次调用,就会发现变量被初始化两次,并且它们的状态不会被保留-值不会相加。在

要解决这个问题,您需要确保只创建一次变量。一种方法是在海绵宝宝测验中创建变量,并将它们作为参数传递,以计算答案。count_的回答只会更新变量。它不会初始化它们。它们只初始化一次。在

备注:

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

您的列表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]

这应该行得通。在

因为Ax、Bx等都是函数的局部变量,所以每次调用函数时都会得到一组新的变量。在

作为一个肮脏的伎俩,你可以将它们声明为全局变量。在

相关问题 更多 >