蒙蒂霍尔悖论游戏python实现

蒙蒂霍尔悖论游戏python实现
代码描述
假设你正参加一个有奖游戏节目,并且有3 道门可选:其中一个后面是汽车,另外两个后面是山羊。你选择一个门,比如说1 号门,主持人当然知道每个门后面是什么并且打开了另一个门,比如说3 号门,后面是一只山羊。这时,主持人会问你"你想改选2 号门吗?",然后根据你的选择确定最终要打开的门,并确定你获得山羊(输)或者汽车(赢)。
编写程序,模拟上面的游戏。
代码目的
1、了解蒙蒂霍尔悖论内容。
2、了解游戏规则。
3、熟练运用字典方法和集合运算。
4、了解断言语句assert 的用法。
5、熟练运用循环结构。

上代码
先随机确定汽车的位置

door={}
    num=randint(0,2)     #随机选择一个数作为car
    for i in range(3):
        if i==num:
            door[i]='car'
        else:
            door[i]='goat'

将汽车的值获取出来,然后可以判断

carnum=list(car_num.values()).index('car')+1      #将car对应的字典的key+1,对应三个门
    while True:
        try:
            men=int(input("请选择你要打开哪个门(1-3):"))       
            assert 1<=men<=3
            break
        except:
            print("请输入正确的门号(1,2,3)")
    if men==carnum:         
        #如果选择的门是car,随机选择一个不是car的门,即onum
        while True:
            onum=randint(1,3)
            if onum!=carnum:
                break
    else:
        #如果选择的门是goat,选择另一个goat的门
        onum=6-men-carnum     #1+2+3=6,6是门数之和,可以用来选择出另一个goat的门
    print("主持人打开了{0}门,里面是山羊".format(onum))
    el_num=6-onum-men
    while True:
        try:
            fnum=input("请问是否需要更换你的选择为{0}(是就输入yes,否就输入no):".format(el_num))
            assert fnum=='yes' or fnum=='no'
            break
        except:
            print("请输入yes或no")
    if fnum=='yes':
        num_2=el_num
    else:
        num_2=men
    if num_2==carnum:
        print("恭喜获胜")
    else:
        print("不好意思,您猜错了")

下面是完整代码

from random import *
def xipai():
    door={}
    num=randint(0,2)     #随机选择一个数作为car
    for i in range(3):
        if i==num:
            door[i]='car'
        else:
            door[i]='goat'
    return door
def game():
    print("=========================蒙蒂霍尔悖论游戏=========================")
    car_num=xipai()
    carnum=list(car_num.values()).index('car')+1      #将car对应的字典的key+1,对应三个门
    while True:
        try:
            men=int(input("请选择你要打开哪个门(1-3):"))       
            assert 1<=men<=3
            break
        except:
            print("请输入正确的门号(1,2,3)")
    if men==carnum:         
        #如果选择的门是car,随机选择一个不是car的门,即onum
        while True:
            onum=randint(1,3)
            if onum!=carnum:
                break
    else:
        #如果选择的门是goat,选择另一个goat的门
        onum=6-men-carnum     #1+2+3=6,6是门数之和,可以用来选择出另一个goat的门
    print("主持人打开了{0}门,里面是山羊".format(onum))
    el_num=6-onum-men
    while True:
        try:
            fnum=input("请问是否需要更换你的选择为{0}(是就输入yes,否就输入no):".format(el_num))
            assert fnum=='yes' or fnum=='no'
            break
        except:
            print("请输入yes或no")
    if fnum=='yes':
        num_2=el_num
    else:
        num_2=men
    if num_2==carnum:
        print("恭喜获胜")
    else:
        print("不好意思,您猜错了")
def main():
    game()
    while True:
        try:
            continue1=input("请问是否继续游戏,继续请输入yes,退出请输入no:")
            assert continue1=='yes' or continue1=='no'
            if continue1=='no':
                print("感谢游戏,祝您生活愉快!!!")
                break
            if continue1=='yes':
                game()
        except:
            print("请输入yes或no")
            
if __name__=='__main__':
    main()

  • 8
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员阿诺斯

您的打赏是我创作路上最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值