岩石剪刀,跳过结果

时间:2014-11-22 17:14:44

标签: python random

import random
for i in range(3):
user = str(input("Please enter your choice: "))
if (random.randrange(3)) == 0 :
    print("Computer chooses Rock")
    if user == "scissors" :
        print("computer wins")
    elif user == "paper" :
        print("player wins")
    else :
        print("tie")
elif (random.randrange(3)) == 1 :
    print("Computer chooses Paper")
    if user == "rock" :
        print("computer wins")
    elif user == "scissors" :
        print("player wins")
    else :
        print("tie")
elif (random.randrange(3)) == 2 :
    print("Computer chooses Scissors")
    if user == "paper" :
        print("computer wins")
    elif user == "rock" :
        print("player wins")
    else :
        print("tie")

这里的格式有点奇怪(之前没有使用过这个网站)。我不知道原因,但我不知道为什么这个代码有时会跳过结果。如果有人能提供帮助那就太棒了。

这是运行几次时生成的内容

enter your choice: scissors
Computer chooses Rock
computer wins
enter your choice: scissors
Computer chooses Scissors
tie
enter your choice: scissors
Computer chooses Rock
computer wins
================================ RESTART ================================ 
Please enter your choice: scissors
Please enter your choice: rock
Computer chooses Rock
tie
Please enter your choice: rock
Computer chooses Rock
tie

我不明白为什么它会跳过结果。似乎是随机发生的

5 个答案:

答案 0 :(得分:5)

你不应该使用random.randrange(3)三次。这可以是例如给你以下数字:1,2,然后是0.所以然后执行的代码将是:

if (1 == 0):
   ...
elif (2 == 1):
   ...
elif (0 == 2):
   ...

并且不会执行if语句的任何条件块。

而是做这样的事情:

computerChoice = random.randrange(3)
...
if computerCoice == 0:
  ...
elif computerChoice == 1:
  ...
elif computerChoice == 2:
  ...
else
  raise Exception("something is definitively wrong here")

答案 1 :(得分:2)

您多次使用random.randrange(3),并且每次都有可能是不同的数字。所以我建议您将值分配给变量,然后在if中使用它语句:

x = random.randrange(3)

答案 2 :(得分:2)

我看到你已经接受了安德烈的优秀答案,这会让你清楚地理解你的错误。正如我评论你的Q说有更简单的方法来奖励一手牌,这是我的看法

import random

c = random.randrange(3)
u = int(input('1=scissors, 2=paper, 3=rock: '))-1

if u==c:
    print '... tie ...'
elif (u==0 and c==1) or (u==1 and c==2) or (u==2 and c==0):
    print 'User wins!'
else:
    print 'Computer wins... Booh!'

但我不确定它是否更简单...确定它更短但更简单?

可以让它更短

import random

def hand():
    c = random.randrange(3)
    u = int(input('1=scissors, 2=paper, 3=rock: '))-1
    print "User played",['scissors,', 'paper,', 'rock,'][u],
    print "computer played",['scissors.', 'paper.', 'rock.'][c]
    print ['Tie.', 'User wins!', 'Computer wins...'][(c-u)%3]

这是一个示例会话:

>>> hand()
1=scissors, 2=paper, 3=rock: 3
User played rock, computer played scissors.
User wins!
>>> 

答案 3 :(得分:1)

是的,这是随机发生的。 :)

if (random.randrange(3)) == 0 :
  # computer "chooses" a random number
elif (random.randrange(3)) == 1 :
  # now the computer's choice is a new choice from 0..2
elif (random.randrange(3)) == 2 :
  # and now it's different again

答案 4 :(得分:0)

你的错误在这里:

if (random.randrange(3)) == 0 : elif (random.randrange(3)) == 1 : elif (random.randrange(3)) == 2 :

在if语句中,random.randrange(3)会生成一个随机数,如果它不匹配,它将转到elif语句,random.randrange(3)将生成另一个随机数它可能与先前生成的随机数不同。有一段时间,因此您的代码将跳过一个,两个,三个或没有语句。

如果您希望代码良好,则应将随机数分配给整数,然后在答案中使用该整数。

应该是

ran=random.randrange(3) if ran == 0 : elif ran == 2 : elif ran == 3 :