python实验之蒙提·霍尔(Monty|python实验之蒙提·霍尔(Monty Hall)悖论游戏

【python实验之蒙提·霍尔(Monty|python实验之蒙提·霍尔(Monty Hall)悖论游戏】一、实验目的
了解蒙提霍尔悖论内容和游戏规则;熟练运用字典方法和集合运算;了解断言语句assert 的用法;熟练运用Python中的循环结构解决实际问题。
二、实验内容
假设你正在参加一个有奖游戏节目,你被要求在三扇门中选择一扇:其中一扇后面有一辆汽车;其余两扇后面则是山羊。你选择了一道门,假设是一号门,然后主持人(知道门后面有什么)选择并开启了另一扇后面有山羊的门,假设是三号门。这时,主持人问你:“你想选择二号门吗?”,然后根据你的选择确定最终要打开的门,并确定你获得山羊(输)或者汽车(赢)。转换你的选择对你来说是一种优势吗?
编写程序,模拟上面的游戏。

import randomdef product_things(): # 创建字典作为3扇门及其后面的物品 d = {} # car number tmp = random.randint(0, 2) # thing to door for i in range(3): if i == tmp: d['door' + str(i)] = 'car' else: d['door' + str(i)] = 'goat' return ddef game(): door_and_thing = product_things() car_number = list(door_and_thing.values()).index('car') #print(car_number) first_choose_number = int(input('Choose a door to open:')) # 判断数字是否在0-2之间,否则异常 assert first_choose_number <= 2 assert first_choose_number >= 0 # 判断第一个选择的数字是不是car if first_choose_number == car_number:# 是 # 输出out number,不等于car对应的值 while True: out_number = random.randint(0, 2) if out_number != car_number: break else:# 不是 # 输出另一个goat的数字 out_number = 3 - first_choose_number - car_number # 主持人告诉一个山羊的位置 print('"goat" behind the door ' + str(out_number)) # 主持人询问是否换门 else_number = 3 - out_number - first_choose_number choose_boolean = input('Switch to ' + str(else_number) + '?(y/n)') if choose_boolean == 'y': second_number = else_number else: second_number = first_choose_number # 最终选择的门是否为car if second_number == car_number: print('You win!') else: print('You lost!') returnwhile True: print("=====================================") game() choose_continue = input('Do you want ti try once more?(y/n)') if choose_continue == 'n': break

python实验之蒙提·霍尔(Monty|python实验之蒙提·霍尔(Monty Hall)悖论游戏
文章图片

附:转换你的选择对你来说是一种优势吗?
我编写了一个程序,自动化实现了这个游戏,并得出了这个问题的答案。
import randomdef product_things(): # 创建字典作为3扇门及其后面的物品 d = {} # car number tmp = random.randint(0, 2) # thing to door for i in range(3): if i == tmp: d['door' + str(i)] = 'car' else: d['door' + str(i)] = 'goat' return ddef game(tmp): door_and_thing = product_things() car_number = list(door_and_thing.values()).index('car') #print(car_number) #first_choose_number = int(input('Choose a door to open:')) first_choose_number=random.randint(0,2)# 判断数字是否在0-2之间,否则异常 assert first_choose_number <= 2 assert first_choose_number >= 0 # 判断第一个选择的数字是不是car if first_choose_number == car_number:# 是 # 输出out number,不等于car对应的值 while True: out_number = random.randint(0, 2) if out_number != car_number: break else:# 不是 # 输出另一个goat的数字 out_number = 3 - first_choose_number - car_number # 主持人告诉一个山羊的位置 #print('"goat" behind the door ' + str(out_number)) # 主持人询问是否换门 else_number = 3 - out_number - first_choose_number #choose_boolean = input('Switch to ' + str(else_number) + '?(y/n)') choose_boolean = tmp if choose_boolean == 'y': second_number = else_number else: second_number = first_choose_number # 最终选择的门是否为car if second_number == car_number: #print('You win!') return True else: #print('You lost!') return False #returnsecceed = 0 falsed = 0 tmp=input("转换与否:input y or n ") for i in range(100000): result = game(tmp) #print('Do you want ti try once more?(y/n)') if result is True: secceed += 1 elif result is False: falsed += 1 print('成功率:') print(secceed / (secceed + falsed)) #print((falsed / (secceed + falsed)))

python实验之蒙提·霍尔(Monty|python实验之蒙提·霍尔(Monty Hall)悖论游戏
文章图片
python实验之蒙提·霍尔(Monty|python实验之蒙提·霍尔(Monty Hall)悖论游戏
文章图片

    推荐阅读