I lettori come te aiutano a sostenere MUO. Quando effettui un acquisto utilizzando i link sul nostro sito, potremmo guadagnare una commissione di affiliazione. Per saperne di più.

Se sei un bambino degli anni '70, potresti essere cresciuto guardando il popolare programma televisivo, Facciamo un affare. Da allora, le persone discutono vivacemente del puzzle di Monty Hall e si divertono a replicarlo. L'incredibile suspense e il dramma creati quando il concorrente sceglie una delle tre porte è divertente da guardare ogni volta.

Usando la matematica e un po' di programmazione, costruirai un Monty Hall Simulator usando Python. Usando questo, sarai in grado di decidere una volta per tutte che cambiare le porte aumenta le tue possibilità di vincita.

Qual è il problema di Monty Hall?

Il problema di Monty Hall è un rompicapo che prende il nome dall'ospite del gioco, Monty Hall. Ci sono tre porte, solo una delle quali contiene un premio desiderato. Una volta scelta una porta, Monty, chissà cosa c'è dietro, apre un'altra porta, rivelando una capra. Ora hai la possibilità di mantenere la tua decisione originale o passare all'altra porta.

instagram viewer

A causa della sua natura sorprendente e imprevedibile, il puzzle di Monty Hall è molto popolare. Sebbene si tratti di probabilità, la soluzione sfida l'intuizione. Serve come un'eccellente dimostrazione di quanto possano essere confusi i calcoli delle probabilità. Il puzzle ci insegna come ignorare le impressioni di eventi apparentemente casuali e concentrarsi invece sul ragionamento e sui fatti.

I moduli Random e Tkinter

Per creare una simulazione di Monty Hall in Python, inizia con i moduli Random e Tkinter.

Ci sono diverse funzioni per produrre numeri casuali nel modulo Random. Puoi utilizzare questi algoritmi per generare sequenze mescolate, movimenti di gioco e numeri interi pseudo-casuali. È usato frequentemente in giochi come il cricket a mano, O un semplice test di battitura, nonché per simulare il lancio dei dadi e mescolare le liste.

Tkinter è la libreria GUI predefinita per Python. Usandolo, puoi creare fantastiche applicazioni GUI. Potresti creare un'app per elenchi di cose da fare, un editor di testo o una semplice calcolatrice. Puoi mettere in pratica le tue conoscenze e affinare le tue capacità di programmazione utilizzando Python e Tkinter per creare app desktop di base.

Apri un terminale ed esegui il seguente comando per aggiungere Tkinter al tuo sistema:

pip installa tkinter

Come costruire un simulatore di Monty Hall usando Python

Puoi trovare il codice sorgente del Monty Hall Simulator in questo Deposito GitHub.

Importa i moduli random e Tkinter. La funzione StringVar semplifica il controllo del valore di un widget come un'etichetta o una voce. È possibile utilizzare un'etichetta per visualizzare del testo sullo schermo e una voce per recuperare l'input dell'utente.

Inizializza l'istanza Tkinter e visualizza la finestra principale. Impostare le dimensioni della finestra in modo che siano larghe 600 pixel e alte 200 pixel utilizzando il geometria() metodo. Imposta un titolo di finestra appropriato e proibisci il suo ridimensionamento.

importare casuale
da tkinter importare StringVar, Label, Tk, Entry

finestra = Tk()
finestra.geometria("600x200")
finestra.titolo("Simulazione di Monty Hall")
finestra.ridimensionabile(0, 0)

Successivamente, imposta due coppie di widget e variabili per memorizzare i risultati della simulazione. La tua app richiederà un numero di esecuzioni da completare. Durante ogni corsa, simulerà il gioco e registrerà il risultato in ogni caso: se il giocatore decide di cambiare o mantenere la stessa scelta.

Usando StringVar(), imposta i valori iniziali della stessa scelta e cambia la scelta su 0. Definisci un widget Entry e imposta la sua dimensione del carattere su 5. Dichiara due etichette per visualizzare la stessa e la scelta cambiata e posizionala. Dichiara altre due etichette che visualizzeranno il valore delle variabili definite in precedenza. Infine, posiziona il widget Entry sotto queste quattro etichette.

stessa_scelta = StringVar()
scelta_commutata = StringVar()
stessa_scelta.set(0)
scelta_commutata.set(0)
no_sample = Voce (font=5)

Etichetta (testo="Stessa scelta").posto (x=230, y=58)
Etichetta (testo="Scelta cambiata").posto (x=230, y=90)
Etichetta (textvariable=stessa_scelta, font=(50)).posto (x=350, y=58)
Etichetta (textvariable=scelta_commutata, font=(50)).posto (x=350, y=90)
no_sample.place (x=200, y=120)

Definire una funzione, simulare. Inizializza le variabili del risultato e ottieni il valore del campione inserito dall'utente. Dichiara un elenco che contiene gli oggetti che le porte riveleranno.

All'interno di ogni corsa, crea un elenco duplicato delle porte originali e mescolalo in ordine casuale. Scegli una porta a caso e rimuovila: questo simula la scelta del giocatore. Quindi simula la rivelazione di Monty: se la prima porta non contiene il premio, aprila, altrimenti apri la seconda porta. Rimuovi quella scelta e lascia la porta rimanente come opzione a cui passare.

defsimulare(evento):
stessa_scelta_risultato = 0
commutato_scelta_risultato = 0
campioni = int (no_sample.get())
porte = ["oro", "capra", "capra"]

per _ In gamma (campioni):
porte_simulate = porte.copia()
random.shuffle (simulato_porte)
first_choice = random.choice (simulato_porte)
simulated_doors.remove (prima_scelta)
porta_aperta = porte_simulate[0] Se porte_simulate[0] != "oro"altro porte_simulate[1]
simulated_doors.remove (opened_door)
commutata_seconda_scelta = porte_simulate[0]

Se la prima scelta contiene il premio desiderato, incrementa di uno lo stesso risultato della scelta e riflettilo sullo schermo. Altrimenti, eseguire la stessa operazione per la scelta commutata.

Se prima_scelta == "oro":
stessa_scelta_risultato += 1
stessa_scelta.set (same_scelta_risultato)
elif commutato_seconda_scelta == "oro":
risultato_scelta_commutato += 1
commutato_scelta.set (commutato_risultato_scelta)

Un passaggio importante consiste nell'associare il tasto Invio a un evento nella finestra di Tkinter. In questo modo si garantisce che quando il giocatore preme accedere, verrà eseguita una particolare funzione. Per raggiungere questo obiettivo, passare il file string e la funzione di simulazione come parametri per il file legamento() funzione.

IL ciclo principale() La funzione dice a Python di eseguire il ciclo di eventi di Tkinter e di ascoltare gli eventi (come la pressione di un pulsante) finché non chiudi la finestra.

no_sample.bind("", simulare)
finestra.mainloop()

Metti tutto insieme ed esegui il tuo programma per simulare il puzzle in azione.

Output di Monty Hall Simulator con Python

Durante l'esecuzione del programma, vedrai una semplice finestra con le etichette di scelta Same e Switched. Immettere un numero di campione nel campo in basso per visualizzare i risultati simulati. In questo esempio di 3 esecuzioni, il programma mostra che vince una volta con la stessa scelta e due volte con un cambio.

Questi risultati sono casuali, ma puoi eseguire la simulazione con una dimensione del campione maggiore per una maggiore precisione. Nella seguente dimensione del campione di 100, la scelta cambiata vince 65 volte.

Risoluzione dei problemi utilizzando la programmazione

Il Monty Hall Simulator è un'eccellente dimostrazione di come è possibile utilizzare la programmazione per risolvere i problemi della vita reale. È possibile sviluppare vari algoritmi e addestrare modelli per eseguire attività particolari come l'ordinamento di un array o il miglioramento dell'efficacia di un sistema per una produzione ottimale.

Diversi linguaggi di programmazione offrono diverse capacità e funzioni per semplificare la programmazione. Utilizzando Python, puoi creare modelli in grado di prevedere i valori futuri di un set di dati con maggiore precisione. Inoltre, puoi automatizzare le operazioni ripetitive, ridurre il lavoro noioso e migliorare la velocità e la precisione.