当我的程序只给出一个时,我的程序给出了多个结果?

时间:2018-01-24 11:44:00

标签: python

我在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

4 个答案:

答案 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来检查是否存在胜负,并检查是否存在平局。