Seite 1 von 1
Ich brauche Hilfe, da ich nicht weiß was der Fehler ist.
Verfasst: Sonntag 10. Januar 2021, 16:41
von Trapper511
Das ist mein Code, es steht das in der 17. Zeile ein fehler sei, aber ich weiß nicht welcher.
Bitte helft mir
import random
import time
#EINLeitung
print("°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°"); time.sleep (0.75)
print ("°Schere|Stein|Papier|Echse|Spock°"); time.sleep (0.75)
print("°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°\n\n"); time.sleep (0.75)
#Variablen
angriff = ("Schere", "Stein", "Papier", "Echse", "Spock")
spielen = True
while spielen:
#Angriff auswählen
angriffauswahl = 0
while angriffauswahl not in (1,2,3,4,5):
angriffauswahl = int (input("[1]Schere [2]Stein [3]Papier [4]Echse [5]Spock\n"))
spielerangriff = angriff(angriffauswahl -1)
Re: Ich brauche Hilfe, da ich nicht weiß was der Fehler ist.
Verfasst: Sonntag 10. Januar 2021, 19:30
von __blackjack__
@Trapper511: Was soll das heissen Du weisst nicht welcher? Woher weisst Du denn dann, das da einer ist und das der in Zeile 17 ist? Wenn da eine Fehlermeldung beim Ausführen kommt, dann weisst Du doch was das für ein Fehler ist. Die Fehlermeldung ist diesem Fall sogar sehr aussagekräftig, weil die sehr deutlich *genau den Fehler* benennt. Das ist nicht immer so deutlich auf den Punkt.
Re: Ich brauche Hilfe, da ich nicht weiß was der Fehler ist.
Verfasst: Sonntag 10. Januar 2021, 20:25
von Dennis89
Wobei ich den Fehler auf Zeile 18 getippt hätte.
@Trapper511 gewöhne dir doch bitte gleich an, deinen Code in Code-Tags zu posten und achte bitte immer darauf, dass die Einrückungen stimmen, das ist sehr wichtig.
Code-Tags:
"Vollständiger Editor" anklicken, den Button </> auswählen und den Code zwischen die beiden Klammerausdrücken einfügen.
Grüße
Dennis
Re: Ich brauche Hilfe, da ich nicht weiß was der Fehler ist.
Verfasst: Sonntag 10. Januar 2021, 20:58
von __blackjack__
@Dennis89: Nee, der Traceback fängt mit ``File "./forum23.py", line 17`` an wird von einer von `SyntaxError` abgeleiteten Ausnahme ausgelöst.

Re: Ich brauche Hilfe, da ich nicht weiß was der Fehler ist.
Verfasst: Sonntag 10. Januar 2021, 23:28
von Dennis89
@__blackjack__ da unterscheidet sich bei uns irgendetwas, wenn ich den Code kopiere und die Einrückungen anpasse wie ich denke, sieht das bei mir so aus:
Code: Alles auswählen
import random
import time
#EINLeitung
print("°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°"); time.sleep (0.75)
print ("°Schere|Stein|Papier|Echse|Spock°"); time.sleep (0.75)
print("°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°\n\n"); time.sleep (0.75)
#Variablen
angriff = ("Schere", "Stein", "Papier", "Echse", "Spock")
spielen = True
while spielen:
#Angriff auswählen
angriffauswahl = 0
while angriffauswahl not in (1,2,3,4,5):
angriffauswahl = int (input("[1]Schere [2]Stein [3]Papier [4]Echse [5]Spock\n"))
spielerangriff = angriff(angriffauswahl -1)
Code: Alles auswählen
Traceback (most recent call last):
File "/xxx/xxx/xxx/test_forum.py", [b]line 18[/b], in <module>
spielerangriff = angriff(angriffauswahl -1)
TypeError: 'tuple' object is not callable
Wie dem auch sei, mit dem Begriff 'tuple' in der Fehlermeldung, sollte man die Lösung schnell finden, wie du schon am Anfang angemerkt hast.
Grüße und Gute Nacht
Dennis
Re: Ich brauche Hilfe, da ich nicht weiß was der Fehler ist.
Verfasst: Sonntag 10. Januar 2021, 23:39
von Sirius3
Da hast Du die Einrückung falsch geraten. Du mußt einfach nur den ganzen Beitrag zitieren, dann siehst Du die Einrückungen:
Code: Alles auswählen
import random
import time
#EINLeitung
print("°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°"); time.sleep (0.75)
print ("°Schere|Stein|Papier|Echse|Spock°"); time.sleep (0.75)
print("°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°\n\n"); time.sleep (0.75)
#Variablen
angriff = ("Schere", "Stein", "Papier", "Echse", "Spock")
spielen = True
while spielen:
#Angriff auswählen
angriffauswahl = 0
while angriffauswahl not in (1,2,3,4,5):
angriffauswahl = int (input("[1]Schere [2]Stein [3]Papier [4]Echse [5]Spock\n"))
spielerangriff = angriff(angriffauswahl -1)
Und dort ist der erste Fehler die Einrückungen, und die weiteren Fehler kommen erst, wenn man den korrigiert hat.
Re: Ich brauche Hilfe, da ich nicht weiß was der Fehler ist.
Verfasst: Montag 11. Januar 2021, 07:03
von Dennis89
Sirius3 hat geschrieben: Sonntag 10. Januar 2021, 23:39
Da hast Du die Einrückung falsch geraten. Du mußt einfach nur den ganzen Beitrag zitieren, dann siehst Du die Einrückungen:
Danke, gut zu wissen.
Grüße
Dennis
Re: Ich brauche Hilfe, da ich nicht weiß was der Fehler ist.
Verfasst: Montag 11. Januar 2021, 07:57
von Sirius3
@Trapper511: Einrückungen sind in Python ein wichtige syntaktisches Element. Nach einem while muß eine Block folgen, der durch seine einheitliche Einrückung definiert wird. Der fehlt bei Dir.
Eine while-Schleife, die nur startet, wenn man einer Variable einen Dummy-Wert zuweist, ist umständlich. Dafür schreibt man eine while-True-Schleife, deren Abbruchbedingung innerhalb der Schleife steht.
Schere, Stein, Papier, Spock und Echse kommem insgesamt jeweils drei mal vor, sollten aber am besten nur einmal vorkommen. Dann verhindert man Fehler durch falsche Reihenfolge, o.ä.
Alles auf oberster Ebene sollte in Funktionen gepackt werden, auch Abschnitte, wie die Eingabe stehen am besten in eigenen Funktionen. Pro Zeile steht eine Anweisung, vergiss also dass es ; überhaupt gibt.
`angriff` ist eigentlich keine Variable, sondern eine Konstante, und das Tuple ist eigentlich eine Liste, weil es eine Aufzählung von gleichartigen Dingen ist.
Code: Alles auswählen
ANGRIFF = ["Schere", "Stein", "Papier", "Echse", "Spock"]
def angriff_auswaehlen():
while True:
auswahl = " ".join(f"[{i}] {n}" for i, n in enumerate(ANGRIFF, 1))
angriffauswahl = int(input(f"{auswahl}\n"))
if 1 <= angriffauswahl <= len(ANGRIFF):
break
return angriffauswahl - 1
def main():
title = '|'.join(ANGRIFF)
print("*"* (len(title) + 2))
print(f"*{title}*")
print("*"* (len(title) + 2))
print()
print()
while True:
#Angriff auswählen
angriffauswahl = angriff_auswaehlen()
spielerangriff = ANGRIFF[angriffauswahl]
if __name__ == '__main__':
main()
So ist mit einer kleinen Änderung das Spiel auf Schere-Stein-Papier umstellen.