2012-01-10 75 views
0

我是Python的初學者,開始搞亂它。 我有這個簡單的代碼:在字典中使用變量

def guess_number(Name,Gender): 
    if Gender=='Male': 
     Title='Mr.' 
    else: 
     Title='Ms.' 
    number=int(raw_input("Hello " + Title + Name + ", guess what my favorite number is between 1-10")) 
    if number==4: 
     print number 
     print "That's my favorite number!" 
    else: 
     print number 
     print "Try Again!" 
    return number 

choice_dict=dict([(1,0),(2,0),(3,0),(4,0),(5,0),(6,0),(7,0),(8,0),(9,0),(10,0)]) 

for i in range(10): 
    guess_number("Noam","Male") 
    choice_dict[number]=choice_dict[number]+1 

print choice_dict[1], choice_dict[2], choice_dict[3], choice_dict[4], choice_dict[5], choice_dict[6], choice_dict[7], choice_dict[8], choice_dict[9], choice_dict[10] 

這是一個簡單的過程,其中一個叫功能「guess_number」它要求一個人1-10之間一定數量。它重複該功能10次,並且對於每個選擇的數字,它將在字典中的數字上加1,最後它打印出每個數字被選擇的次數。

出於某種原因,我不明白它告訴我即使我在函數「guess_number」中返回了變量「number」,「number」沒有被定義。

缺什麼?

回答

1

變化

guess_number("Noam","Male") 

number = guess_number("Noam","Male") 

numberguess_number功能的(本地)範圍定義,而不是在全球範圍內。爲了在全球範圍內引用numbernumber首先需要綁定到從全球範圍訪問,和值

參考(從一個函數的局部變量不可訪問,請參見LEGB規則,下面。):

4

number是一個局部變量的函數guess_number。它不在其外面。你回報的是價值 - 不是變量本身,而是它的價值 - 你需要使用或分配給某物。你甚至可以把它分配給同一名稱的變量 - 只要你知道這是另一個變量恰好具有相同的名稱:

number = guess_number("Noam", "Male") 
+0

+1,很好的解釋。 – 2012-01-10 17:59:02

+0

謝謝你!我現在知道了。 – Pichie 2012-01-11 20:22:46

0

變量在函數「guess_number」「數」只是該功能的本地功能。要解決您的問題,您必須爲「guess_number」的結果分配一個變量「number」。因此,改變

guess_number("Noam","Male") 

number = guess_number("Noam","Male")