我在python中写过这个剪刀纸摇滚游戏,有时它可以很好地工作,但有时它会打印多个结果。例如,它会说你并列,然后你赢了,有时它也会说你输了。这不取决于实际结果,但似乎完全随机,请帮忙!
while True:
import time
print('Scissors ')
time.sleep(1)
print(' paper')
time.sleep(1)
print(' rock!')
choice = input()
if choice not in ('rock', 'paper', 'scissors'):
print('Invalid Input')
import random
RPS = ['rock', 'paper', 'scissors']#BOT CHOICE
#TIE
TIE = ['The bot also chose ' + choice, 'It is a tie!', 'TIE!']
#WIN
RWIN = ['The bot chose scissors, but you smashed them with your rock!', 'YOU WIN!', 'Your rock beat the bots scissors']
PWIN = ['The bot chose rock, but you smothered it with your paper', 'YOU WIN!', 'Your paper beat the bots rock']
SWIN = ['The bot chose paper but you cut it to bits!', 'YOU WIN', 'Your scissors beat the bots paper!']
#LOSS
RLOSS = ['The bot chose paper and smotherd your rock :(', 'You loose...', 'Nice try but you lost...better luck next time']
PLOSS = ['The bot chose scissors and chopped your paper to bits :(', 'You loose...', 'Nice try but you lost...better luck next time']
SLOSS = ['The bot chose rock and smashed your scissors :(', 'You loose...', 'Nice try but you lost...better luck next time']
#TIE
if choice ==(random.choice(RPS)):
print(random.choice(TIE))
#WIN
#ROCK
if choice =='rock' and (random.choice(RPS)) =='scissors':
print(random.choice(RWIN))
#PAPER
if choice =='paper' and (random.choice(RPS)) =='rock':
print(random.choice(PWIN))
#SCISSORS
if choice =='scissors' and (random.choice(RPS)) =='paper':
print(random.choice(SWIN))
#LOSS
#ROCK
if choice =='rock' and (random.choice(RPS)) =='paper':
print(random.choice(RLOSS))
#PAPER
if choice =='paper' and (random.choice(RPS)) =='scissors':
print(random.choice(PLOSS))
#SCISSORS
if choice =='scissors' and (random.choice(RPS)) =='rock':
print(random.choice(SLOSS))
while True:
time.sleep(1)
print(' ')
print('Again? (y/n) ')
answer = input()
if answer in ('y', 'n'):
break
print('Invalid input')
if answer =='y':
continue
else:
print('Goodbye')
break
答案 0 :(得分:3)
您多次运行random.choice(RPS)
,因此每次获得不同的结果时,这意味着它可以匹配多个ifs或者没有(您希望匹配单个if)。
要修复它,请添加一个变量来存储random.choice(RPS)
的结果(一次),并在if语句中使用该变量all。
答案 1 :(得分:0)
您的问题来自于在每个支票中调用random.choice(RPS)
,即在每个if语句中给出不同的选择。因此有时会提供多个输出。为了解决问题,在对随机机器人选择进行任何检查之前,只需将其记录在一个变量中,并将ifs与该变量进行比较。
示例:
bot_choice = random.choice(RPS)
if choice == bot_choice:
print "you have a tie"
并使用bot_choice
希望这有帮助!
答案 2 :(得分:0)
在每个条件测试中,您正在为计算机做出新的随机选择。评估了多个条件(一次用于平局,一次用于赢,一次用于损失),并且在得到肯定结果后不返回,所以从技术上讲,在某些运行中你可以有三个答案太
现在,您需要执行其他响应所说的内容 - 将“bot”的结果存储在变量中的单个运行中,而不是每次都重新进行评估。但是,您还应该清理条件逻辑,这样就不会评估不可能的等式(elif),并在得到肯定结果后离开函数。
答案 3 :(得分:0)
您继续使用random.choose()
生成新的随机选择。
所以即使它可能是一个平局,在你检查它是否是胜利之后,你让机器人再次选择然后它会产生新的结果。
解决这个问题的方法是使一个变量成为机器人的选择。并且使用elif
来检查是否存在胜负,并检查是否存在平局。