Python-蒙蒂霍尔悖论游戏

蒙蒂霍尔悖论

蒙提霍尔悖论亦称为 蒙提霍尔问题 、蒙特霍问题或蒙提霍尔悖论、三门问题(Monty Hall problem)。 三门问题(Monty Hall problem),是一个源自博弈论的数学游戏问题,大致出自美国的电视游戏节目Let’s Make a Deal。 问题的名字来自该节目的主持人蒙提·霍尔(Monty Hall)。 这个游戏的玩法是:参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门就可以赢得该汽车,而另外两扇门后面则各藏有一只山羊。 当参赛者选定了一扇门,但未去开启它的时候,节目主持人会开启剩下两扇门的其中一扇,露出其中一只山羊。 主持人其后会问参赛者要不要换另一扇仍然关上的门。。

代码

import random


def init_door():
    """初始化门内的物质"""
    doors = {1: None, 2: None, 3: None, random.randrange(1, 4): 'Car'}
    """把车放到任意一个门内"""
    for key, value in doors.items():
        if value == 'Car':
            continue
        doors[key] = 'Sleep'
    # print(doors)
    return doors


def test():
    while True:
        doors = init_door()

        try:
            my_choice = int(input("输入1到3的数字(输入其他退出游戏)"))
            print("你选择了" + str(my_choice) + "号门")
        except Exception:
            continue
        if my_choice not in [1, 2, 3]:
            exit(-1)

        he_choice = 0  # 主持人选择有羊的门
        for key, value in doors.items():
            if doors[key] != 'Car' and key != my_choice:
                a = doors.pop(key)
                he_choice = key
                print(str(key) + "号门是" + a)
                break

        change = input("你要换门吗(y/n)")
        try:
            assert change == 'y' or 'n'
        except Exception:
            print("Error")

        if change == 'y':
            only_door = 6 - my_choice - he_choice
            # 1+2+3 减去你和主持人选的门,就是剩下的门
            if doors[only_door] == 'Car':
                print("===========Bingo==============")
            else:
                print("很遗憾是" + doors[only_door])
        elif change == 'n':
            if doors[my_choice] == 'Car':
                print("===========Bingo==============")
            else:
                print("很遗憾是" + doors[my_choice])


if __name__ == '__main__':
    test()

运行结果

Python-蒙蒂霍尔悖论游戏_第1张图片

你可能感兴趣的:(游戏,python)