kann mir bitte jemand bei meinem spiel helfen?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
jan.b
User
Beiträge: 195
Registriert: Mittwoch 9. August 2017, 17:12

BlackJack hat geschrieben:@jan.b: Das ``In [1]:`` ist der Eingabeprompt, nicht Teil der Eingabe.
Entschuldigung, wenn ich nerve, aber ich habe gedacht, dass es funktioniert, wenn ich die Elemente in ein Verhältnis zu einander setze (z.27-33) und dann die Elemente in einen string zu konvertiere(z. 21 - 25), um die werte dann in der abfrage abzufragen(z. 49- ende). wenn aber nur nach dem Alphabet verglichen wird wie kann ich die Elemente (schere, stein, papier)dann definieren bzw in ein Verhältnis zueinander setzen?
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@jan.b: wie Du die Vergleiche machen kannst, hab ich doch schon geschrieben.
jan.b
User
Beiträge: 195
Registriert: Mittwoch 9. August 2017, 17:12

Sirius3 hat geschrieben:@jan.b: wie Du die Vergleiche machen kannst, hab ich doch schon geschrieben.
sry bin durcheinander gekommen.
jan.b
User
Beiträge: 195
Registriert: Mittwoch 9. August 2017, 17:12

Sirius3 hat geschrieben:@jan.b: das festlegen von Bedingungen funktioniert so nicht. Beim Programmieren muß man die Semantik der Sprache lernen und kann nicht hoffen, dass erfundene Semantik irgendwie richtig von der Programmiersprache erraten wird.

Dass ›i‹ für input steht, hast Du spätestens in einer Woche vergessen. Kurz ist eigentlich kein Kriterium für einen guten Variablennamen.

Um auf Deine Frage zurückzukommen: am Einfachsten programmierst Du die Bedingungen explizit aus, also wenn Spieler "papier" gewählt hat und der Computer "stein" dann hat Spieler gewonnen. Das sind maximal 9 Bedingungen, die Du gut in einer Funktion kapseln kannst. Später kannst Du Dir ja noch überlegen, wie Du die Bedingungen vereinfachen kannst.

Code: Alles auswählen

runde = 1
print("das ist runde %s" % (runde))
spieleroptionen = ["schere", "stein", "papier"]
spieler = input("Deine Eingbe: ")
ki = (random.choice(spieleroptionen))
print("die Eingabe von der ki: %s" % (ki))
if spieler == ki:
     print("unentschieden")
elif spieler == "papier":
     if ki == "schere":
          print("punkt für tom")
elif spieler == "schere":
     if ki == "stein":
          print("punkt für tom")
elif spieler == "stein":
     if ki == "schere":
          print("punkt für dich")
elif spieler == "stein":
     if ki == "papier":
          print("punkt für tom")
elif  spieler == "schere":
     if ki == "papier":
          print("punkt für dich")
elif  spieler == "papier":
     if ki == "schere":
          print("punkt für tom")
else:
     spieler not in spieleroptionen
     print("falsche eingabe")
     if ki not in spieleroptionen:
         print("falsche eingabe")
print("______________________________________________________________________")
time.sleep(0.5)
runde = runde + 1
wenn du das mal in deine Shell eingibst wird wenn du stein eingibst und ki papier eingibt kein Ergebnis angezeigt. und das war ja wohl so expliziet wie möglich.
Zuletzt geändert von Anonymous am Donnerstag 10. August 2017, 05:31, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

@jan.b: Die ``elif``-Zweige schliessen sich aus. Wenn einer davon genommen wird, dann wird kein anderer mehr geprüft. Das heisst wenn der Spieler 'stein' eingegeben hat, dann wird der ``elif``-Zweig in Zeile 15 betreten, und danach kein anderer mehr.

Das Problem hätte man nicht wenn im ``elif`` nicht nur eine Teilbedingung, sondern die gesamte Bedingung stehen würde. Teilbedingungen kann man mit den Operatoren ``and`` und ``or`` verknüpfen.

Die Importe von `time` und `random` haben noch gefehlt.

Eingerückt wird per Konvention vier Leerzeichen pro Ebene. Siehe auch den Style Guide for Python Code.

Zeile 28 hat keinen Effekt. Der Ausdruck wird zu einem Wahrheitswert ausgewertet, mit dem dann aber nichts gemacht wird. Sollte aber vielleicht, denn im Gegensatz zu der nachfolgenden Prüfung kann der Benutzer ja tatsächlich etwas total anderes eingeben.

Das sollte man vielleicht unterbinden in dem man eine Funktion schreibt, die den Benutzer solange nach einer Eingabe fragt, bis der eine gültige Eingabe gemacht hat. Das muss nicht einmal Absicht vom Benutzer sein — man vertippt sich ja auch mal.

In neuem Code würde ich die `format()`-Methode auf Zeichenketten dem ``%``-Operator vorziehen.
jan.b
User
Beiträge: 195
Registriert: Mittwoch 9. August 2017, 17:12

BlackJack hat geschrieben:@jan.b: Die ``elif``-Zweige schliessen sich aus. Wenn einer davon genommen wird, dann wird kein anderer mehr geprüft. Das heisst wenn der Spieler 'stein' eingegeben hat, dann wird der ``elif``-Zweig in Zeile 15 betreten, und danach kein anderer mehr.

Das Problem hätte man nicht wenn im ``elif`` nicht nur eine Teilbedingung, sondern die gesamte Bedingung stehen würde. Teilbedingungen kann man mit den Operatoren ``and`` und ``or`` verknüpfen.

Die Importe von `time` und `random` haben noch gefehlt.

Eingerückt wird per Konvention vier Leerzeichen pro Ebene. Siehe auch den Style Guide for Python Code.

Zeile 28 hat keinen Effekt. Der Ausdruck wird zu einem Wahrheitswert ausgewertet, mit dem dann aber nichts gemacht wird. Sollte aber vielleicht, denn im Gegensatz zu der nachfolgenden Prüfung kann der Benutzer ja tatsächlich etwas total anderes eingeben.

Das sollte man vielleicht unterbinden in dem man eine Funktion schreibt, die den Benutzer solange nach einer Eingabe fragt, bis der eine gültige Eingabe gemacht hat. Das muss nicht einmal Absicht vom Benutzer sein — man vertippt sich ja auch mal.

In neuem Code würde ich die `format()`-Methode auf Zeichenketten dem ``%``-Operator vorziehen.
danke ich probiers.
Antworten