我对Python的石头、布、剪刀的编程有问题。我的问题发生在打平的时候。当有一个平局,我的程序应该进入一个while循环,在平局的if语句中,再次搜索相同的问题,石头,布或剪刀,直到它打破平局。我附上了问题图片的链接:
第五轮:你可以看到问题所在。在
我正在参加一个编程课程的介绍,所以我还是一个初学者,我不知道我做错了什么。在
import random
def rock_paper_scissors():
playerscore = 0
computerscore = 0
rounds = input('\nHow many points does it take to win?: ')
count = 1
while playerscore or computerscore != int(rounds):
print('\n********************* ROUND #',count,'*********************')
player = input('\nPick your throw: [r]ock, [p]aper, or [s]cissors?: ')
computerthrow = random.randint(0,2)
if (computerthrow == 0):
computer = "rock"
computer = 'r'
elif (computerthrow == 1):
computer = "paper"
computer = 'p'
elif (computerthrow == 2):
computer = "scissors"
computer = 's'
if (player == computer):
print('Tie!')
while (player == computer):
player = input('\nPick your throw: [r]ock, [p]aper, or [s]cissors?: ')
computerthrow = random.randint(0,2)
if (computerthrow == 0):
computer = "rock"
computer = 'r'
elif (computerthrow == 1):
computer = "paper"
computer = 'p'
elif (computerthrow == 2):
computer = "scissors"
computer = 's'
print(computer)
elif (player == 'r'):
if (computer == "p"):
print('Computer threw paper, you lose!')
computerscore=computerscore+1
else:
print('Computer threw scissors, you win!')
playerscore = playerscore+1
#count = count + 1
elif (player == 'p'):
if (computer == "r"):
print('Computer threw rock, you win!')
playerscore = playerscore+1
else:
print('Computer threw scissors, you lose!')
computerscore=computerscore+1
#count = count + 1
elif (player == 's'):
if (computer == "p"):
print('Computer threw paper, you win!')
playerscore = playerscore+1
else:
print('Computer threw rock, you lose!')
computerscore=computerscore+1
count = count + 1
print('\nYour score: ',playerscore)
print('Computer''s score: ',computerscore,'\n')
print('********************* GAME OVER ********************')
def main():
print('ROCK PAPER SCISSORS in Python')
print()
print('Rules: 1) Rock wins over Scissors.')
print(' 2) Scissors wins over Paper.')
print(' 3) Paper wins over Rock.')
rock_paper_scissors()
main()
您的问题来自于控制语句(if、elif、else)的结构化方式。当你进入你的平局,而循环,你是不断运行,直到有人获胜,这似乎没有问题。问题是一旦你这样做了,python解释器会跳过控制块中的所有elif和else语句(如果我说if x==3:do this else:do that),如果x确实==3,我不希望python继续执行else条件。抱歉,如果这是令人困惑,长话短说,你需要确保,即使你的平局得到执行,你仍然继续得分,并开始新的一轮。简单的方法是将elif(player==“r”)改为if语句。这样,解释器将得分控制序列视为自己的块,一旦分配了每个球员的掷球数,它将始终被执行。在
示例:
如果您调用f(0): Python将打印出1,然后完成!在
如果你叫g(0): Python将打印出1到2然后完成!在
你的直接问题是,你有一个平局的处理代码在同一个
if/elif
链中,作为另一个得分的处理。在你会说这样的话:
结果,当有平局时,游戏正确地循环直到没有平局。但是,is会跳过更新分数的代码,因为如果/elif/else就是这样工作的!在
一个直接的解决办法是打破if/elif链,并将领带处理放入单独的if块中:
^{pr2}$话虽如此,让我再补充几点:
将两个值按顺序分配给同一个变量:
^{3}$这没有任何作用,因为第二个覆盖了第一个。你应该删除每一对中的第一行。
您可能应该编写一个函数,反复要求用户选择一个,直到它得到石头、布或剪刀。使用while循环。
^{} module 中有一个函数将从列表、元组或字符串中选择一个项并返回它。你可以用它让电脑直接选择r,p,s。
您可以通过预先确定结果来简化代码。假设你让电脑先选。如果电脑选“r”,你就知道“p”是赢,“s”是输。将胜负选择存储在一对变量中,所有测试都可以归结为一个测试:
相关问题 更多 >
编程相关推荐