Python "Schere-Stein-Papier" funktioniert nicht, man kann nicht gewinnen?
Ich bin nun so gut wie fertig mit meinem Spiel, aber man kann nicht gewinnen. Ich habe es auch mit "try except" versucht, aber hat auch nicht funktioniert. Woran kann das liegen?
Ich weiß man könnte das schöner/besser machen, aber mir passt es so:)
Code:
#Imports
import time
import random
random.seed()
#Headline
print("*************************"); time.sleep(0.5)
print("*Schere - Stein - Papier*"); time.sleep(0.5)
print("*************************"); time.sleep(0.5)
true = True
while true == True:
print("-------------------------------") #Abtrennung
#Input
print("Wählen Sie eine Figur: ")
spielerwahl = input().lower()
print("")
computerwahl = ["schere", "stein", "papier"]
#Output
print("Sie wählten: ", spielerwahl)
pc = random.choice(computerwahl)
print("Der Computer wählte: ", pc)
print("")
#Verzweigungen
if spielerwahl == pc:
print("*********Unentschieden!*********")
#Spielerwahl = Schere
elif spielerwahl == "schere" or spielerwahl == "Schere" and pc == "stein":
print("***********Verloren!***********")
elif spielerwahl == "schere" or spielerwahl == "Schere" and pc == "papier":
print("***********Gewonnen!***********")
#Spielerwahl = Stein
elif spielerwahl == "stein" or spielerwahl == "Stein" and pc == "papier":
print("***********Verloren!***********")
elif spielerwahl == "stein" or spielerwahl == "Stein" and pc == "schere":
print("***********Gewonnen!***********")
#Spielerwahl = Papier
elif spielerwahl == "papier" or spielerwahl == "Papier" and pc == "schere":
print("***********Verloren!***********")
elif spielerwahl == "papier" or spielerwahl == "Papier" and pc == "stein":
print("***********Gewonnen!***********")
#Fehlermeldung
else:
print("*********Nicht möglich!*********")
#Abtrennung
print("-------------------------------")
print(""); time.sleep(1.5)
3 Antworten
while true == True
Nur "while True" tuts auch. Ist aber nur eine Stilsache
spielerwahl == "schere" or spielerwahl == "Schere"
"spielerwahl == "Schere"" kannst du dir sparen, weil du zuvor alles in Kleinbuchstaben umgewandelt hast.
Abgesehen davon hat das Programm (habe es ein paar mal durchdebuggt) funktioniert bzw. ich habe gewonnen.
Bei Zufallsauswahl kann es manchmal dauern, bis der gewünschte Fall eintritt. Wenn du das vermeiden willst, nutze doch einen Debugger und ändere zB zur Laufzeit den Wert den der Computer "gewürfelt" hat.
Danke, es hat funktioniert als ich "spielerwahl == "Schere"" weggelassen habe :o
Hi,
ich würde or's immer Klammern meines Wissens nach bindet hier das and stärker und somit würde dort
spielerwahl == "papier" or (spielerwahl == "Papier" and pc == "schere")
stehen.
Zu:
(spielerwahl == "papier" or spielerwahl == "Papier") and pc == "schere"
Ich weiß man könnte das schöner/besser machen, aber mir passt es so:)
Kannst dann hier aufhören zu lesen ;P
Ich würde aber die vielen IF's vermeiden und lieber eine Liste von Tupeln von Regeln aufstellen. z.B alle Tupel kombinationen die Gewinnen oder so. Dann kannst du eine Abfrage machen:
if (spielerwahl, pc) in gewinner_liste: pass
Dadurch ersparst du dir auch die vielen prints. Desweiteren hast du dir gut überlegt die Eingabe direkt in lower case zu lesen. Damit kannst du dir aber auch schon die
spielerwahl == "Papier" # und andere dementsprechenden Abfragen
Abfragen sparen.
Regards,
LifeArtist
Aus diesem Grund schreibe ich sowas auch trotzdem gerne dazu ;)
Setze bei deinen Überprüfungen Klammern!
(spielerwahl == "schere" or spielerwahl == "Schere") and pc == "stein":
so, wie du es jetzt hast, wird es so interpretiert:
spielerwahl == "schere" or (spielerwahl == "Schere" and pc == "stein"):
Wenn du also dein Wahl mit großem Anfangsbuchstaben eingibst, solltest du auch jetzt noch gewinnen können.
Danke, ja mir passt es so weil ich es anders nicht kann xD, aber ich verbessere mich gerne!