2014-03-02 82 views
0

我想在Python中編程一個岩石,紙張,剪刀模擬器遊戲。它在大多數情況下都有效,但偶爾當我輸入分配給變量「guess」的輸入的岩石,紙張或剪刀的選擇時,則不會返回任何內容。謝謝! 這裏是程序:在python中調試岩石,紙張,剪刀遊戲

def main(): 
    print('This game is rock, paper, scissors') 
    number=userguess() 
    num=computernumber() 
    result(number, num) 
#computernumber function assigns number to rock, paper, scissors 
def computernumber(): 
    num=random.randint(1,4) 
    if num==1: 
     print('Computer picks rock') 
    elif num==2: 
     print('Computer picks paper') 
    elif num==3: 
     print('Computer picks scissors') 
    return num 
#userguess assigns rock, paper, scissors to a number 
def userguess(): 
    guess=input("Choose, 'rock','paper',or 'scissors:") #<- this input prompt 
    if valid(guess): 
     if guess== 'rock': 
      number=1 
     elif guess== 'paper': 
      number=2 
     elif guess== 'scissors': 
      number=3 
     return number 
    else: 
     print('Please choose a valid response') 
     return userguess() 
def valid(guess): 
    if guess=='rock' or guess=='paper' or guess=='scissors': 
     result= True 
    else: 
     result= False 
    return result 
def restart(): 
    again=input('Play again? (y/n)') 
    if again=='y': 
     main() 
    elif again=='n': 
     print('Goodbye') 
    else: 
     print('please enter y or n') 
     restart() 
#function to display result 
def result(num,number): 
    if number==num: 
     print('Tie') 
     restart() 
    elif number==1 and num==2: 
     print('you won!') 
     restart() 
    elif number==1 and num==3: 
     print ('you lost!') 
     restart() 
    elif number==2 and num==1: 
     print('you lost!') 
     restart() 
    elif number==2 and num==3: 
     print('you won!') 
     restart() 
    elif number==3 and num==1: 
     print('you won!') 
     restart() 
    elif number==3 and num==2: 
     print('you lost!') 
     restart() 
main() 
+1

[Code Review](http://codereview.stackexchange.com)是一個比較好的地方。 – Christian

+0

嗨,我的答案是解決你的問題嗎?很高興,如果你顯示一些迴應。 – Ray

回答

0

我認爲問題在這裏。

#userguess assigns rock, paper, scissors to a number 
def userguess(): 
    guess=input("Choose, 'rock','paper',or 'scissors:") #<- this input prompt 
    if valid(guess): 
     if guess== 'rock': 
      number=1 
     elif guess== 'paper': 
      number=2 
     elif guess== 'scissors': 
      number=3 
     return number 
    else: 
     print('Please choose a valid response') 
     # return userguess() 
     # You returned a function which is None 
     userguess() 

希望這可以解決您的問題。

此外,我想建議一些捷徑來縮短代碼。例如,上面的部分可以縮短如下:

str2num = {'rock': 1, 'paper': 2, 'scissors': 3} # can be defined globally 

def userguess(): 
    guess=input("Choose, 'rock','paper',or 'scissors:") #<- this input prompt 
    if valid(guess): 
     return str2num[guess] 
    else: 
     print('Please choose a valid response') 
     userguess()