Warum ist der Code unreachable?
import os
import sys
# Wilkommensnachricht
print("Tic-Tac-Toe Python")
# Variablen
spiel_aktiv = True
spieler_aktuell = 'X'
versuche = 0
# Spielfeld als Liste erstellen
spielfeld = [" ",
"1","2","3",
"4","5","6",
"7","8","9"]
# Spielfeld ausgeben
def spielfeld_ausgeben():
print (spielfeld[1] + "|" + spielfeld[2] + "|" + spielfeld[3] )
print (spielfeld[4] + "|" + spielfeld[5] + "|" + spielfeld[6] )
print (spielfeld[7] + "|" + spielfeld[8] + "|" + spielfeld[9] )
# Die Spieler Eingabe
def spieler_eingabe():
while True:
global versuche
spieler_zug = input("Auf welches Feld setzt du? ")
spieler_zug = int(spieler_zug)
spielfeld[spieler_zug] = spieler_aktuell
versuche += 1
# Kontrolle ob und wer das Spiel gewonnen hat.
def kontrolle_gewonnen():
if spielfeld[1] == spielfeld[2] == spielfeld[3]:
print("Du hast gewonnen", spieler_aktuell)
if spielfeld[4] == spielfeld[5] == spielfeld[6]:
print("Du hast gewonnen", spieler_aktuell)
if spielfeld[7] == spielfeld[8] == spielfeld[9]:
print("Du hast gewonnen", spieler_aktuell)
# Kontrolle auf Spalten
if spielfeld[1] == spielfeld[4] == spielfeld[7]:
print("Du hast gewonnen", spieler_aktuell)
if spielfeld[2] == spielfeld[5] == spielfeld[8]:
print("Du hast gewonnen", spieler_aktuell)
if spielfeld[3] == spielfeld[6] == spielfeld[9]:
print("Du hast gewonnen", spieler_aktuell)
# Kontrolle auf Diagonalen
if spielfeld[1] == spielfeld[5] == spielfeld[9]:
print("Du hast gewonnen", spieler_aktuell)
if spielfeld[7] == spielfeld[5] == spielfeld[3]:
print("Du hast gewonnen", spieler_aktuell)
# Kontrolle ob unentschieden
def kontrolle_auf_unentschieden():
if versuche == 9:
print("Unentschieden!")
# Den aktiven Spieler wechseln X/O
def spieler_change():
global spieler_aktuell
if spieler_aktuell == "X":
spieler_aktuell = "O"
else:
spieler_aktuell = 'X'
def main():
spielfeld_ausgeben()
while True:
spieler_eingabe()
# Code unreachable
spielfeld_ausgeben()
kontrolle_gewonnen()
kontrolle_auf_unentschieden()
spieler_change()
# Ende von Code unreacheable
main()
4 Antworten
Die Lösung deines Problems weißt du schon.
Darf ich fragen, welche IDE den Fehler sieht und meldet?
Die mitgelieferte IDLE-Shell läuft einfach los ...
Du startest in der Methode "spieler_eingabe()" eine while-Schleife ohne Abbruchkriterium, es ist also eine Endlosschleife. Und weil nach der Endlosschleife nichts mehr kommen kann, ist der nachfolgende Code unerreichbar. Um das zu beheben müsstest du in der While-Schleife in der Funktion "spieler_eingabe()" entweder ein break einbauen, oder anstatt True eine Bedingung formulieren, die sich auch noch ändert...
In der while schleife befindet sich eine while True schleife. Heisst eine Endlosschleife in ner Schleife. Wenn die innere Schleife Endlos durchläuft so ist der nachfolgende Code unerreichbar. Merkst selber
Du kommst aus spieler_eingabe() nie wieder raus, weil du durch das "while true" eine Endlosschleife erzeugst und in der Methode bleibst. Somit wird der Rest vom Code nie erreicht.
Sorry dummer Fehler