为什么Python没有打印出正确的答案?

时间:2016-04-12 07:25:49

标签: python coin-flipping

我无法理解为什么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)

任何想法?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您忘记将heads放在引号下以使其成为字符串,因此if语句始终为false,因此head始终为0,tails将始终为# 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) 100。

试试这个:

var result = cmbEmp_Name
    .Items
    .Where(i => i.Selected)
    .Select(x => x.Value)
    .ToList()
    .Join(",");

答案 2 :(得分: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的次数。

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

>>> 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]