Python中的蒙提霍爾(Monty Hall)問題是一個有趣的概率問題。在這個問題中,被告知有三扇門,其中一扇門后面有一輛汽車,另外兩扇門后面是山羊。你選擇一扇門,主持人打開一扇后面是山羊的門,詢問你是否要更換你的選擇。問題在于,如果你更換選擇,你中獎的概率會增加。讓我們用Python來模擬一下。
import random #初始化游戲 def init_game(): doors = ['sheep', 'sheep', 'car'] random.shuffle(doors) return doors #改變選擇 def change_choice(doors, choice): for i in range(3): if i != choice and doors[i] == 'sheep': return i return choice #模擬游戲 def play_game(change): doors = init_game() choice = random.randint(0,2) if not change: return doors[choice] == 'car' else: new_choice = change_choice(doors, choice) return doors[new_choice] == 'car' #多次模擬游戲 def simulate(change, n=10000): wins = 0 for i in range(n): if play_game(change): wins += 1 return wins / n #輸出結果 print('如果不改變選擇,中獎概率為:', simulate(False)) print('如果改變選擇,中獎概率為:', simulate(True))
代碼中的init_game函數用于初始化游戲,將三扇門隨機排列。change_choice函數用于改變選擇,如果沒有更換選擇,就返回原來的選擇;否則選擇剩下的門中,后面是山羊的門中不同與原來選擇的那扇門。play_game函數用于模擬游戲,如果不改變選擇,并且選擇的門后面是車,就返回True,表示中獎;如果改變選擇并且新選擇的門后面是車,也返回True。simulate函數用于進行多次游戲模擬,并返回獲勝的概率。最后在控制臺輸出結果。
下一篇vue copper