三門問題(問題來源于Crossin的編程教室)
三門問題(Monty Hall PRoblem)亦稱為蒙提霍爾問題、蒙特霍問題或蒙提霍爾悖論,大致出自美國的電視游戲節(jié)目 Let’s Make a Deal。問題名字來自該節(jié)目的主持人蒙提·霍爾(Monty Hall)。
參賽者會看見三扇關(guān)閉了的門,其中一扇的后面有一輛汽車,選中后面有車的那扇門可贏得該汽車,另外兩扇門后面則各藏有一只山羊。當(dāng)參賽者選定了一扇門,但未去開啟它的時候,節(jié)目主持人開啟剩下兩扇門的其中一扇,露出其中一只山羊。主持人其后會問參賽者要不要換另一扇仍然關(guān)上的門。問題是:換另一扇門會否增加參賽者贏得汽車的機率?
問題解答:
from random import choicedef stay(): doors = ['car','goat','goat'] #設(shè)置三扇門,其中兩扇門后面是山羊,一扇門后是汽車 choose = choice(doors) #隨機選擇一扇門 if choose == 'car': #不換門則直接判斷 return 'win' else: return 'lose'def switch(): doors = ['car', 'goat', 'goat'] choose = choice(doors) doors.remove(choose) #選擇的門放一邊 doors.remove('goat') #剩下的門,去掉一只山羊 if doors == ['car']: #換門 return 'win' else: return 'lose'if __name__ == '__main__': total = 100000 count_switch = 0 win_switch = 0 count_stay = 0 win_stay = 0 for i in range(total): choose = choice([1,2]) #隨機選擇換門還是不換門 if choose == 1: count_switch += 1 if switch() == 'win': win_switch += 1 else: count_stay += 1 if stay() == 'win': win_stay += 1 print('switch:',count_switch) print('switch win:',win_switch,'%.2f%%'%(100*win_switch/count_switch)) print('stay:',count_stay) print('stay win:',win_stay,'%.2f%%'%(100*win_stay/count_stay))
 
  | 
新聞熱點
疑難解答