如何使用'while loop'或其他方法多次打印随机结果?

时间:2017-02-07 11:46:44

标签: python python-3.x random while-loop

我正在尝试玩两个掷骰子的游戏。该游戏包含500发子弹。在每一轮中,两个硬币同时被滚动,如果两个硬币都有“头”,那么我们赢得1英镑,如果两个都有“尾巴”,那么我们将损失1英镑,如果我们有一个硬币显示'头'和另一个硬币显示'尾巴'或反之亦然然后我们只是'再试一次'。我试图打印最终结果20次,但是'while循环'似乎不起作用,我哪里出错了?

coin_one = [random.randint(0, 1) for x in range(500)] #flips coin 1 heads or tails 500 times
coin_two = [random.randint(0, 1) for x in range(500)] #flips coin 2 heads or tails 500 times
game = zip(coin_one, coin_two) 

def coin_toss_game1():    
    total = 0
    for coin_one, coin_two in game:
        if coin_one and coin_two:
            total += 1   #if both coin one and two return heads then we win $1
        elif not a and not b:
            total -= 1   #if both coin one and two return tails then we lose $1
        else:
            continue #if coin one returns heads and coin two returns tails then we try again
    return total

y = 0
while y < 21:
print(coin_toss_game1())  #This is where I am encountering problems with printing result 20 times
y += 1

这给出了以下结果: 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

它应该返回类似的结果:7 2 -5 15 -9 12 ... 我在这里犯了什么错误?

2 个答案:

答案 0 :(得分:3)

这里有两个问题。

1。您正在尝试重用zip对象

在Python 3中(我假设你根据你的结果使用它),zip()返回一个生成器。生成器只能迭代一次。如果您尝试再次迭代它,它将为空。这就是为什么超出第一个结果的所有结果都回归为零......他们实际上并没有做任何事情。

如果你只是修复,但是,你仍然会遇到问题...所有20次运行都会产生相同的结果。

2。您为所有迭代使用相同的硬币翻转序列

您在程序顶部生成了一次硬币翻转,然后尝试在所有20轮中使用相同的序列。所有结果都是一样的,这并不奇怪。

两个问题的解决方法是相同的:将硬币翻转和zip ping生成移动到函数中,以便每次运行时都重做:

def coin_toss_game1():
    coin_one = [random.randint(0, 1) for x in range(500)]
    coin_two = [random.randint(0, 1) for x in range(500)]
    game = zip(coin_one, coin_two)
    total = 0
    for coin_one, coin_two in game:
        ...

顺便说一句,用于循环固定次数的更简单的Python习语是:

for _ in range(20):    # Nothing magical about the underscore... it's just a dummy variable
    print(coin_toss_game1())

答案 1 :(得分:0)

我认为这是您正在寻找的代码:

def coin_toss_game1():
  coin_one = [random.randint(0, 1) for x in range(500)]
  coin_two = [random.randint(0, 1) for x in range(500)]
  game = zip(coin_one, coin_two)
  total = 0
  for a, b in game:
    if a and b:
      total += 1
    elif not a and not b:
      total -= 1
    else:
      continue
  return total

y = 0
while y < 21:
  print(coin_toss_game1())
  y += 1

你拥有的代码运行游戏一次(500回合)而不是20次。上面的代码,每次while循环的迭代,运行500轮并显示结果。所以你得到了500轮比赛的结果,20次。