gerne verbesserungsvorschläge und fehlermeldungen!

Code-Stücke können hier veröffentlicht werden.
Antworten
Struppi004
User
Beiträge: 6
Registriert: Sonntag 26. Januar 2020, 19:01

#tic Tac Toe


spielfeld = [' ' for x in range (10)]

def PRINT(spielfeld):

print("Wilkommen zu TicTacToe")

print(spielfeld[1] + "|" + spielfeld[2] + "|" + spielfeld[3])
print(spielfeld[4] + "|" + spielfeld[5] + "|" + spielfeld[6])
print(spielfeld[7] + "|" + spielfeld[8] + "|" + spielfeld[9])

def EINGABE(position, buchstabe):
buchstabe = spielfeld[position]

def PLATZ_FREI(position):
return spielfeld[position] == ' '

def GEWONNEN(board, letter):

return (board[1] == letter and board[2] == letter and board[3] == letter) or (board[4] == letter and board[5] == letter and board[6] == letter) or (board[7] == letter and board[8] == letter and board[9] == letter) or (board[1] == letter and board[4] == letter and board[7] == letter) or (board[2] == letter and board[5] == letter and board[8] == letter) or (board[3] == letter and board[6] == letter and board[9] == letter) or (board[1] == letter and board[5] == letter and board[9] == letter) or (board[3] == letter and board[5] == letter and board[7] == letter)



def VOLL():
if spielfeld.count(' ') < 1:
return True
else:
False
def SPIELER_MOVE(): #überprüfung auf falsche zahl und symbol setzung
auswahl_sp = input("bitte wähle eine zahl von (1-9)?")
Zug = True

while Zug:
try:
auswahl_sp = int(auswahl_sp)
try:
if auswahl_sp > 0 and auswahl_sp < 10:
if PLATZ_FREI(auswahl_sp):
EINGABE(auswahl_sp, 'X')
Zug = False
else:
print("dieser platz ist belegt")
else:
print("bitte gib eine zahl in der spannr ein")
except:
print("bitte gib eine zahl in der spannr ein")
except:
print("bitte gib eine zahl ein")

def KI_MOVE():
import random

mögliche_züge = [x for x,buchstabe in enumerate(spielfeld) if buchstabe == ' ']
auswahl_KI = random.randrange(mögliche_züge)

EINGABE(spielfeld, 'O')
PRINT(spielfeld)
print("der computer hat stelle", auswahl_KI, "gesetzt")

def main():
spielen = True
aktueller_spieler = 'X'
while spielen:
PRINT(spielfeld)
if aktueller_spieler == 'X':
SPIELER_MOVE()
aktueller_spieler = 'O'
elif aktueller_spieler == 'O':
KI_MOVE()
aktueller_spieler = 'X'

if GEWONNEN:
spielen = False
print(aktueller_spieler,"hst gewonnen")
else:
return True

if VOLL():
spielen = False
print("unentschieden")
else:
return True

main()








:D
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Es ist wenig sinnvoll, ungetestet 86 Zeilen Code herunterzuschreiben, und zu hoffen, dass das irgendetwas funktionierendes macht.

Zeile 4: benutze keine globalen Variablen. Warum initialisierst Du eine Liste mit 10 Werten, wenn doch nur 9 gebraucht werden?
Zeile 6 und andere: Funktionen schreibt man wie Variablennamen klein_mit_unterstrich. Grossschreibweise ist für Konstanten reserviert.
Zeile 15: das Argument `buchstabe` wird nicht benutzt und die Variable `buchstabe` bekommt zwar einen Wert, der aber auch nicht benutzt wird. Funktionen sollten einen Rückgabewert haben, sonst sind sie ziemlich sinnlos.
Zeile 17 und andere: alles was eine Funktion braucht, muß sie über ihre Argumente bekommen, `spielfeld` fehlt.
Zeile 21: unsinnige Leerzeile. Deine Leerzeilensetzung macht das Lesen schwer.
Zeile 22: eine Zeile mit 569 Zeichen ist etwas lang.
Zeile 27: `count(' ')` < 0 bedeutet ja, dass ' ' gar nicht vorkommt und das kann man lesbarer mit ›not in‹ lösen. Ist aber bei Deinem Datendesign nie der Fall.
Zeile 30: da fehlt ein ›return‹
Zeile 33,35: das wäre eine while-True-Schleife, die man per ›break‹ oder ›return‹ verläßt.
Zeile 44: falsche Einrückung.
Zeile 47: niemals nackte ›except‹ benutzen. Welche Exception tritt denn Deiner Meinung nach im try-Block auf?
Zeile 49: keine so langen try-Blöcke, sondern so wenig Zeilen wie möglich. Keine nackten excepts, sondern so konkrete Exceptions wie möglich, hier ValueError.
Zeile 53: Importe gehören an den Anfang der Datei
Zeile 55: x ist ein schlechter Name für einen Index. Da ist wieder Dein 0-Index dabei.
Zeile 56: randrange funktioniert nicht mit Listen.
Zeile 74: ein Funktionsobjekt evaluiert immer zu wahr.
Zeile 78/84: warum wird hier main verlassen?

Man schreibt kein Programm am Stück, sondern schreibt einzelne Funktionen, die man gut testet, damit man auch weiß, dass sie das richtige tun. Dann setzt man sine Programm aus funktionierenden Funktionen zusammen.
Struppi004
User
Beiträge: 6
Registriert: Sonntag 26. Januar 2020, 19:01

Vielen Dank für die Antwort 😊
Struppi004
User
Beiträge: 6
Registriert: Sonntag 26. Januar 2020, 19:01

hi wie könnte ich das in zeile 74 besser machen
Benutzeravatar
__blackjack__
User
Beiträge: 13082
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Struppi004: Die Funktion aufrufen damit deren Rückgabewert die Bedingung für das ``if`` ist und nicht die Funktion selbst. Hast Du doch mit `VOLL()` richtig gemacht.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten