[英]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內部定義的變量( Ax
, Bx
, Cx
, Dx
)不會在對函數的不同調用中持續存在。
換句話說,每次調用函數時,變量都會實例化,即-正在創建新列表。
這不是特定於python的-它發生在大多數編程語言中。
您可以通過展開對函數的調用來更好地直觀地理解它:只需在腦海中用函數的代碼替換對函數的每次調用,就會發現變量被初始化了兩次,並且其狀態未保留-值不會加起來。
要解決此問題,您需要確保僅創建一次變量。 一種方法是,在海綿bob_quiz中創建變量,並將其作為參數傳遞給count_answers。 作為回報,count_answers將僅更新變量。 它不會初始化它們。 它們將僅初始化一次。
PS:
如果您想更加精確,實際上是在函數執行結束后,將刪除該函數中定義的所有變量。 您無法訪問它們(除非您使用更高級的范例,例如閉包。但是讓我們保持簡單:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.