0

我不明白为什么 Python 没有打印出我的掷硬币游戏中有多少正面和反面?并且一直打印出来0100

# part 2
import random
heads = 0
tails = 0

flip_coin = ['heads', 'tails']

while (heads + tails) < 100:
    flip = random.choice(flip_coin)
    if flip == heads:
        heads += 1
    else:
        tails += 1
print(heads)
print(tails)

有任何想法吗?

4

3 回答 3

2

你在这里做错了

if flip == heads: # You are comparing with the heads count integer variable

你想要的是

if flip == 'heads': # You want to know if it's the string 'heads'

并且始终打印出 0, 100

由于上面的那个错误,如果你分析 if else,因为flip == heads总是错误的,你总是得到else: tails += 1执行,因此tails = 100heads = 0

于 2016-04-12T07:28:18.393 回答
0

你忘了把你的heads下引号使它成为一个字符串,因此你的 if 语句总是false,因此 head 总是 0,并且tails总是 100。

尝试这个:

# part 2
import random
heads = 0
tails = 0

flip_coin = ['heads', 'tails']

while (heads + tails) < 100:
    flip = random.choice(flip_coin)
    if flip == 'heads':
        heads += 1
    else:
        tails += 1
print(heads)
print(tails)
于 2016-04-12T07:29:15.857 回答
0

您只需要注意heads(变量)与'heads'(字符串)不同。在任何情况下,有更好的(嗯,更 Pythonic)的方法来做简单的二选一,像这样在 Python 中。

您可以使用类似以下列表理解的内容:

>>> import random
>>> count = 100
>>> heads = len([1 for i in range(count) if random.randint(0,1) == 1])
>>> tails = count - heads
>>> print(heads, tails)
43 57

的表达式heads可以分解为:

  • 从一个空列表开始,循环运行 100 次。
  • 0/1对于随机值为 的每次1,将 1 添加到列表中。
  • 获取最后的列表长度,它是您翻转的次数 1。

0/1或者,您可以使用正好 100 个随机值填充列表并将它们相加:

>>> heads = sum([random.randint(0,1) for i in range(100)])

这比我提供的原始代码片段更简单,但它没有显示列表理解的全部功能,因为它可以进行转换、迭代和选择:例如,以下代码给出了小于或等于所有正偶数的平方到 20:

>>> [i * i for i in range(1,21) if i % 2 == 0]
[4, 16, 36, 64, 100, 144, 196, 256, 324, 400]
于 2016-04-12T07:34:25.660 回答