{}
run-icon
main.py
# PROBLEMA DI MONTY HALL import random import time def montyhall(num): if not isinstance(num, int): raise TypeError("Il numero di porte deve essere un numero intero!") if num<3: raise ValueError("Il gioco richiede almeno 3 porte!") # POSIZIONE DELL'AUTO doors = [False] * num # False indica le capre, True indica l'auto car = random.randint(0,num-1) doors[car] = True # Inzio del gioco n = int(input(f"Scegli un numero tra 1 e {num}:\n")) if not doors[n-1]: if num == 3: print("Ok, adesso aprirò una porta in cui so che c'è una capra...") else: print("Ok, adesso aprirò delle porte in cui so che ci sono delle capre...") time.sleep(3) for i in range(len(doors)): if i != (n-1) and not doors[i]: print(f"Nella porta {i+1} c'è una capra!") print(f"Rimangono chiuse la porta {n} (ossia quella scelta da te) e la porta {car+1}.") while True: question = int(input("Vuoi cambiare la tua scelta? (digita 0 per NON cambiare, oppure 1 per cambiare)\n")) if question==0 or question==1: if question==0: print(f"Ok, quindi hai deciso di restare sulla porta {n}, vediamo la soluzione...") time.sleep(3) print(f"Hai perso! Mi dispiace, la macchina era nella porta {car+1}.") return if question==1: print(f"Ok, quindi hai deciso di cambiare la porta, scegliendo la {car+1} al posto della {n}, vediamo la soluzione...") time.sleep(3) print(f"Congratulazioni, hai vinto! la macchina era proprio nella porta {car+1}!") return else: print("Devi scegliere un numero tra 0 e 1") if doors[n-1]: nocar = random.randint(0,num-1) while nocar == n-1: # Il ciclo while serve ad evitare che nocar sia uguale a n nocar = random.randint(0,num-1) if num == 3: print("Ok, adesso aprirò una porta in cui so che c'è una capra...") else: print("Ok, adesso aprirò delle porte in cui so che ci sono delle capre...") time.sleep(3) for i in range(len(doors)): if i != (n-1) and i != nocar: print(f"Nella porta {i+1} c'è una capra!") print(f"Rimangono chiuse la porta {car+1} (ossia quella scelta da te) e la porta {nocar+1}.") while True: question = int(input("Vuoi cambiare la tua scelta? (digita 0 per NON cambiare, oppure 1 per cambiare)\n")) if question==0 or question==1: if question==0: print(f"Ok, quindi hai deciso di restare sulla porta {car+1}, vediamo la soluzione...") time.sleep(3) print(f"Congratulazioni, hai vinto! la macchina era proprio nella porta {car+1}!") return if question==1: print(f"Ok, quindi hai deciso di cambiare la porta, scegliendo la {nocar+1} al posto della {car+1}, vediamo la soluzione...") time.sleep(3) print(f"Hai perso! Mi dispiace, la macchina era nella porta {car+1}.") return else: print("Devi scegliere un numero tra 0 e 1") def newgame(): while True: try: d = int(input("Vuoi giocare ancora? (0 per NO, 1 per SI)\n")) if d == 0: print("Grazie per aver giocato!") return False elif d == 1: print("\033[2J\033[H") # serve a cancellare il contenuto del terminale (valido solo su linux/mac e su alcuni playground come online python) return True else: print("Devi scegliere 0 o 1!") except ValueError: print("Devi inserire un numero!") while True: try: n = int(input("PROBLEMA DI MONTY-HALL!\nCi saranno varie porte, in una di queste c'è un'auto e nelle altre delle capre. Tu dovrai trovare l'auto.\nInnanzitutto, con quante porte vuoi giocare? (devono essere minimo 3)\n")) montyhall(n) except: print("C'è stato un errore!") if not newgame(): break
Output