Variablennamen werden in Python komplett_klein geschrieben.
Leerzeilen dienen der Übersichtlichkeit. Du hast Leerzeilen in einem mir nicht erkennbaren Schema verteilt.
Der Aufruf von seed() bewirkt, dass die Zahlen weniger zufällig werden. `seed` ist nur mit Parameter sinnvoll, um immer die selben Zufallszahlen zu erhalten.
wahrscheinlichkeit wird gesetzt, aber nie benutzt. Ist auch besser so, denn die Variable wird ja nicht in jedem Fall gesetzt. In einem Fall ist `wahrscheinlichkeint` auch falsch geschrieben.
tuer_kandidat und tuer_auto haben die selbe Struktur vom Namen her, aber eine völlig andere bedeutung, das eine ist die Tür, hinter der der Kandidat steht, das andere die Tür, die beim Auto offensteht.
Solche Feinheiten sollten im Variablennamen sichtbar sein.
Wenn man sich auschließende if-Abfragen hat, benutzt man elif.
Damit kommt man ungefähr bei folgendem raus:
Code: Alles auswählen
from random import randint
tuer_mit_auto = randint(1,3)
tuer_ausgewaehlt_von_kandidat = int(input("waehle eine Tuer(1,2,3): "))
# schritt 3: moderator oeffnet eine Tuer
if tuer_mit_auto == 1:
if tuer_ausgewaehlt_von_kandidat == 1:
muenze=randint(0,1)
if muenze == 0:
tuer_mit_ziege = 2
else:
tuer_mit_ziege = 3
elif tuer_ausgewaehlt_von_kandidat == 2:
tuer_mit_ziege = 3
elif tuer_ausgewaehlt_von_kandidat == 3:
tuer_mit_ziege = 2
elif tuer_mit_auto == 2:
if tuer_ausgewaehlt_von_kandidat == 1:
tuer_mit_ziege = 3
elif tuer_ausgewaehlt_von_kandidat == 2:
muenze = randint(0,1)
if muenze == 0:
tuer_mit_ziege = 1
else:
tuer_mit_ziege = 3
elif tuer_ausgewaehlt_von_kandidat == 3:
tuer_mit_ziege = 1
elif tuer_mit_auto == 3:
if tuer_ausgewaehlt_von_kandidat == 1:
tuer_mit_ziege = 2
elif tuer_ausgewaehlt_von_kandidat == 2:
tuer_mit_ziege = 1
elif tuer_ausgewaehlt_von_kandidat == 3:
muenze = randint(0,1)
if muenze == 0:
tuer_mit_ziege = 1
else:
tuer_mit_ziege = 2
print(f"hinter Tuer {tuer_mit_ziege} befindet sich eine ziege!")
if tuer_mit_auto == 1 or tuer_mit_auto == 2 or tuer_mit_auto == 3:
print("du hast ein Auto gewonnen!")
else:
print("du hast eine ziege gewonnen!")
Nun hast Du dreimal den selben Code, nur mit anderen Zahlen; solche Dopplungen versucht man beim Programmieren zu vermeiden, in dem man keine fixen Werte benutzt, sondern Variablen.
Das Problem "finde die Tuer mit der Ziege, die nicht die Tuer des Kandidaten ist" läßt sich genau so Programmieren: Nehme alle Türen, die weder Auto noch Kandidat sind und wähle davon eine zufällig aus.
Code: Alles auswählen
from random import randint, choice
tuer_mit_auto = randint(1, 3)
tuer_ausgewaehlt_von_kandidat = int(input("waehle eine Tuer(1,2,3): "))
# schritt 3: moderator oeffnet eine Tuer
tuer_mit_ziege = choice([tuer for tuer in range(1, 3) if tuer not in [tuer_mit_auto, tuer_ausgewaehlt_von_kandidat]])
print(f"hinter Tuer {tuer_mit_ziege} befindet sich eine ziege!")
Die Abfrage, ob Du ein Auto gewonnen hast, ist noch falsch, da solltest Du nochmal draufschauen.