2015-11-14 194 views
2

我不熟悉編程並嘗試在Python中編寫不同版本的DiceRoller遊戲。方法未定義

我的代碼如下,我得到一個doAgain is not defined錯誤。

我不確定這是簡單的縮進,還是我需要在某處休息一下。

我知道這可能是一個重複,但我仍然有一點點麻煩找到這個確切的問題。

import random 
min = 1 
max = 6 

roll_again = 'yes' 

while roll_again == 'yes' or roll_again == 'y': 
    print 'Rolling the dice...' 
    print 'The values are...' 
    print random.randint(min,max) 
    print random.randint(min,max) 
    doAgain() 

def doAgain(): 
    userInput = raw_input('\nWould you like to roll the dice again? \nYes \nNo') 

    if userInput == 'Yes': 
     roll_again 
    elif userInput == 'No': 
     print ('Thank you for playing!') 
    else: 
     print ('You have entered an incorrect response.') 
+2

穿戴'doAgain()'函數之前'while'迴路。 –

+1

不是您當前的問題,但請注意,roll_again永遠不會更新,因此您的循環將永遠持續。 – Foon

回答

1

在調用它之前,您需要定義doAgain()。在while循環之上移動def doAgain():

+0

其中,您可以將'while'循環分成另一個函數,然後您可以保持順序。只有當該函數被調用時,解釋器纔會查找名稱。 – Berci

0

在您當前的設置中def doAgain是在您調用它之後定義的。所以它還不知道doAgain()。他說,約翰的回答是正確的。我想補充一點,如果你把東西放在一個類中,你可以把定義放在你調用它的地方之下。

例如:

class HelloWorld(): 
    # This definition automaticly get executed when the the class is executed. 
    def __init__(self): 
     print('Starting.....') 
     self.sayIt() 

    def sayIt(self): 
     print('Hello World') 

# Run class 
HelloWorld() 
+0

爲此定義一個類是矯枉過正的。您可以輕鬆定義一個包含while循環的函數,然後調用該函數。 – chepner