簡體   English   中英

python上的簡單測驗功能

[英]Simple quiz function on 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]

您在函數內部將列表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等是函數的局部變量,所以每次調用函數時,您基本上都會獲得一組新的變量。

作為一個骯臟的把戲,您可以將它們聲明為全局變量。

問題在於,您在count_answers內部定義的變量( AxBxCxDx )不會在對函數的不同調用中持續存在。

換句話說,每次調用函數時,變量都會實例化,即-正在創建新列表。

這不是特定於python的-它發生在大多數編程語言中。

您可以通過展開對函數的調用來更好地直觀地理解它:只需在腦海中用函數的代碼替換對函數的每次調用,就會發現變量被初始化了兩次,並且其狀態未保留-值不會加起來。

要解決此問題,您需要確保僅創建一次變量。 一種方法是,在海綿bob_quiz中創建變量,並將其作為參數傳遞給count_answers。 作為回報,count_answers將僅更新變量。 它不會初始化它們。 它們將僅初始化一次。

PS:

如果您想更加精確,實際上是在函數執行結束后,將刪除該函數中定義的所有變量。 您無法訪問它們(除非您使用更高級的范例,例如閉包。但是讓我們保持簡單:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM