【问题标题】:Check whether the last three flips were all heads or all tails in Python检查最后三个翻转在 Python 中是全部正面还是全部反面
【发布时间】:2017-04-20 02:21:52
【问题描述】:

所以我有一个挑战,我必须创建一个程序来模拟掷硬币,方法是生成一个对应于正面或反面的随机数。当同时输出三个“H”(正面)或“T”(反面)时,我的程序应该停止。我试图让它工作,这是我到目前为止的代码:

import random
active=True
list1 = []
b = 0
while active:
    l=random.randint(0,1)
    b += 1
    i='a'
    if l == 0:
        i = 'H'
    else:
        i = 'T'
    list1.append(i)

    if list1[:-3] is ['H','H','H']:
        active = False
    elif list1[:-3] is ['T','T','T']:
        active = False
    else:
        active = True
    print(list1),

似乎唯一不起作用的是检查 3 个相应的正面或反面的部分,有人知道我如何正确编码这部分吗?

【问题讨论】:

  • list1[-3:] 是你想要的。
  • 另外,使用==代替is进行比较。
  • 实现上述两个 cmets,确实可以正常工作。

标签: python


【解决方案1】:

正如上面 cmets 中提到的那样,问题是 list1[:-3] 应该是 list1[-3:](获取列表的最后三个元素,而不是所有直到最后三个元素) 并且应该使用== 而不是is 进行比较。调整后的程序是:

import random
active=True
list1 = []
b = 0
while active:
    l=random.randint(0,1)
    b += 1
    i='a'
    if l == 0:
        i = 'H'
    else:
        i = 'T'
    list1.append(i)

    if list1[-3:] == ['H','H','H']:
        active = False
    elif list1[-3:] == ['T','T','T']:
        active = False
    else:
        active = True
    print(list1)

但是,我认为在编写同一程序时看到一种简洁的方法也可能很有用:

import random

flips = []
while flips[-3:] not in (['H'] * 3, ['T'] * 3):
    flips.append(random.choice('HT'))
    print(flips)

【讨论】:

    【解决方案2】:

    您可以通过跟踪正在运行的翻转列表来做到这一点。如果新翻转与前一个翻转相同,则将其附加到列表中。否则,如果新翻页与前一个翻页不同,则清除列表并附加新翻页。一旦长度达到 3,从 while 循环中中断:

    import random
    
    flipping = True
    flips = []
    flip_status = {0: "H", 1: "T"}
    current_flip = None
    
    while flipping:
        current_flip = flip_status[random.randint(0,1)]
        print current_flip
    
        if len(flips) == 0:
            flips.append(current_flip)
    
        else:
            if current_flip == flips[-1]:
                flips.append(current_flip)
                if len(flips) == 3:
                    break
            else:
                flips = []
                flips.append(current_flip)
    
    print "Flips: " + str(flips)
    

    这是一个示例运行:

    T
    T
    H
    T
    T
    H
    T
    H
    H
    T
    T
    T
    Flips: ['T', 'T', 'T']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-24
      • 1970-01-01
      • 1970-01-01
      • 2021-04-26
      • 1970-01-01
      • 2020-04-05
      相关资源
      最近更新 更多