2014-03-02 34 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()