为什么此硬币触发器代码总是翻转HEADS

时间:2018-09-08 03:37:16

标签: python random

我正在制作基本的硬币挡板,由于某种原因,它总是在翻转heads

import random

def flip():
    flip = random.randint(1,100)
    if flip >= 48 & flip < 98:
        print('heads')
    elif flip <= 48:
        print('tails')
    else:
        print('Whoa it landed on its side')
flip()

请帮助

2 个答案:

答案 0 :(得分:1)

在python中,&是按位运算符,请改用and

import random

def flip():
    flip = random.randint(1,100)
    if flip >= 48 and flip < 98:
        print('heads')
    elif flip <= 48:
        print('tails')
    else:
        print('Whoa it landed on its side')

for _ in range(200):
    flip()

答案 1 :(得分:0)

您可以简化很多代码。

让我们从简单的版本开始:

import random

def flip():
    """Simulate the flip of a coin"""
    coin_flip = random.randint(1,100)
    # print('>> coin_flip = %s' % coin_flip)  # uncomment if you want debug
    print('Heads') if coin_flip % 2 == 0 else print('Tails')

结果基于另一种考虑50%概率的方式:奇数和偶数。更容易管理。 coin_flip % 2将随机数除以2,然后返回其余数。如果== 0,则数字为偶数。否则很奇怪。

此处使用的if只是扩展版本的精简版

if coin_flip % 2 == 0:
    print('Heads')
else:
    print('Tails')

让我们介绍一下side effect。我们可以使用参数进行介绍。

import random

def flip(side_effect=0):
    """Simulate the flip of a coin

    :type side_effect: int
    :param side_effect: The percentage for the side effect.
        E.g. `1` means 1% of probability to get the coin landed on its side

    """
    coin_flip = random.randint(1,100)
    # print('>> coin_flip = %s' % coin_flip)  # just for debug
    if coin_flip <= side_effect:
        print('Whoa it landed on its side')
        return # end the program

    print('Heads') if coin_flip % 2 == 0 else print('Tails')

此版本的函数添加了side_effect参数,您可以根据需要更改名称。默认值为0表示未启用,但是您可以尝试使用flip(side_effect=100)运行该函数,这意味着所有翻转都将落在其一侧。

玩得开心