我最近在Codecademy上学习了Python,所以我决定为我的第一个真实程序制作摇滚,纸张,剪刀游戏,因为它看起来很简单。
在测试程序时,Python似乎忽略了嵌套在while循环中的大if / elif语句。游戏生成一个随机整数(0为摇滚,1为纸,2为剪刀),然后打印(用于调试)。然后它会提示玩家输入。之后,不是用if语句评估选择,而是要求玩家做出另一种选择。它还打印一个新的随机整数,所以我知道它只是跳过if语句并返回到while循环的开头。
以下是游戏的代码。如果if语句出现某种语法错误,我就没有看到它。有谁知道发生了什么事?
from random import randint
def choose():
print '\nWill you play rock, paper, or scissors?'
rawhumanchoice = raw_input('> ')
if rawhumanchoice == 'rock' or rawhumanchoice == 'r':
humanchoice = 0
elif rawhumanchoice == 'paper' or rawhumanchoice == 'p':
humanchoice = 1
elif rawhumanchoice == 'scissors' or rawhumanchoice == 's':
humanchoice = 2
else:
print '\nSorry, I didn\'t catch that.'
choose()
def gameinit():
roundsleft = 0
pcwins = 0
humanwins = 0
print 'How many rounds do you want to play?'
roundsleft = raw_input('> ')
while roundsleft > 0:
pcchoice = randint(0,2)
print pcchoice
humanchoice = -1
choose()
if humanchoice == 0: #This is what Python ignores
if pcchoice == 0:
print '\nRock and rock... it\'s a tie!'
roundsleft -= 1
elif pcchoice == 1:
print '\nPaper beats rock... PC wins.'
roundsleft -= 1
pcwins += 1
elif pcchoice == 2:
print '\nRock beats scissors... human wins!'
roundsleft -= 1
humanwins += 1
elif humanchoice == 1:
if pcchoice == 0:
print '\nPaper beats rock... human wins!'
roundsleft -= 1
humanwins += 1
elif pcchoice == 1:
print '\nPaper and paper... it\'s a tie!'
roundsleft -= 1
elif pcchoice == 2:
print '\nScissors beat paper... PC wins.'
roundsleft -= 1
pcwins += 1
elif humanchoice == 2:
if pcchoice == 0:
print '\nRock beats scissors... PC wins.'
roundsleft -= 1
pcwins += 1
elif pcchoice == 1:
print '\nPaper beats rock... human wins!'
roundsleft -= 1
humanwins += 1
elif pcchoice == 2:
print '\nScissors and scissors... it\'s a tie!'
roundsleft -= 1
else:
if humanwins > pcwins:
result = 'The human wins the match!'
elif humanwins < pcwins:
result = 'The PC wins the match.'
elif humanwins == pcwins:
result = 'The match is a tie!'
print '\nThe score is %s:%s... %s \n' % (humanwins,pcwins,result)
gameinit()
gameinit()
答案 0 :(得分:0)
你缺少从方法选择返回,并用
捕捉它humanchoice = choose()
答案 1 :(得分:0)
choose()
不会返回值。因此,它始终返回None
。 None
永远不会等于0
。因此,永远不会触发if
语句。
在Python 3中,比较None
和0
实际上会出错,这有助于您更快地解决这个问题。但是,即使在Python 2中,在致电print humanchoice
之后发出一句简陋的choose()
声明,很快就会发现除了你的None
之外你还没有得到任何东西。
在return humanchoice
的末尾添加choose()
。