ich arbeite zurzeit daran, Tic-Tac-Toe in Python zu programmieren. Nach einiger Zeit komme ich allerdings nicht weiter, da irgendwann ein String als Funktion angesehen wird. Ich möchte, dass mehrere Strings kombiniert werden, was ja mit einer Funktion dazwischen nicht funktioniert. Ich finde jedoch den Fehler dahinter nicht.
Code: Alles auswählen
import os
######################################################################################Brett(Anfang)
def generateBoard():
reihe = [] ##leere reihe erstellen
for i in range(0,5): ##von 0 bis 5 wiederholend leere Spalten erzeugen
feld = []
for j in range(0,6): ##von 0 bis 6 wiederholend Zeilen erzeugen
feld.append(" - ")
reihe.append(feld) ##freie Felder generieren
return reihe ##Funktion schließen und freie Felder ausgeben
def boardtostring(reihe): ##board mit dem Wert von den freien Feldern erstellen
oberste_reihe = " 1 2 3 4 5 6 \n" ##leeren Inhalt erstellen
for feld in reihe:
oberste_reihe += "|" ##leerer Inhalt + definierter Anfang
for element in feld:
oberste_reihe += element ##leerer Inhalt + definierte Mitte
oberste_reihe += "| \n" ##leerer Inhalt + definiertes Ende + Absatz
print(oberste_reihe) ##gesamten Inhalt Ausgeben
return oberste_reihe ##Funktion schließen und Inhalt mitnehmen
board = generateBoard() ##freie Felder als var board abspeichern
boardtostring(board) ##Funktion für Inhalt mit freien Feldern aufrufen
######################################################################################Brett(Ende)/Setzen(Anfang)
#Vorgehensweise: Input bestimmt, wo das jeweilige Zeichen eingesetzt werden soll. Je nach Input wird der Stein gelegt (Schwerkraft nicht vergessen!). Steine sollen abwechselnd gelegt werden.
def such(board, spalte_abfrage): ##Funktion zum Suchen von " - " (leeren Stellen)
zeile = len(board) - 1
while board[zeile][spalte_abfrage] != " - ":
zeile = zeile - 1
if zeile < 0:
return -1
return zeile
def spieler_num(spieler_nummer): #sorgt für die Abwechslung der Spielernummern nach jedem Zug
spieler_nummer / 2
if spieler_nummer == 1:
return 1
else:
return 2
def spalte_zeich(spieler_nummer, spalte_zeichen):
spalte_zeichen = ""
if spieler_nummer == 1:
spalte_zeichen = " X "
else:
spalte_zeichen = " O "
def setz(ÜbergabeBoard, spieler_nummer, spalte_zeichen):
spieler_nummer = 1
spalte_abfrage = [] ##leerer Wert
spalte_abfrage = int(input("Spieler " + str(spieler_nummer) + ": \n In welche Spalte soll dein Stein hin? \n")) - 1 #Abfrage des Wertes als int
if spalte_abfrage >= 0 and spalte_abfrage <= 5:
frei = such(ÜbergabeBoard, spalte_abfrage) ##Überprüfung, ob es die Spalte überhaupt gibt
if frei >= 0: ##bestimmte Spalte im Brett auf Verfügbarkeit überprüfen
ÜbergabeBoard[frei][spalte_abfrage] = spalte_zeichen
spieler_nummer = spieler_nummer + 1
else:
open("notify.txt", "a").write("*belegt*")
#print("*belegt*")
elif spalte_abfrage == "":
open("notify.txt", "w+").write("///////\n *Der Wert der Spalte kann nicht leer sein.* \n/////// \n") ####es kommt erst gar nicht zur Meldung
return 0
else:
open("notify.txt", "w+").write("///////\n *404: Spalte nicht vorhanden* \n/////// \n")
#print("*404: Spalte nicht vorhanden*")
def notify(): ##funktioniert
if os.path.exists("notify.txt"): ##überprüfe ob notify.txt existiert
print(open("notify.txt").read()) ##gebe Inhalt von notify.txt aus
os.remove("notify.txt") ##lösche notify.txt, damit beim nächsten Lesen die letzte Nachricht nicht noch zusätzlich angezeigt wird
while True: #Endlosschleife zum Spielen
#notify()
spieler_nummer = spieler_num
spalte_zeichen = spalte_zeich
boardtostring(board)
notify()
setz(board, spieler_nummer, spalte_zeichen) ###! Variablen der Parameter sind nur lokal, dürfen aber nicht global sein !
#notify()
##noch zu tun: Systemmeldungen zum Schluss ausgeben, wenn welche vorhanden sind; Siegesbedingung einbauen
Es kann zwar ausgeführt werden, aber irgendwann heißt es:
Code: Alles auswählen
Traceback (most recent call last):
File "/Users/name/Documents/Programmierung/Tic-Tac-Toe.py", line 93, in <module>
boardtostring(board)
File "/Users/name/Documents/Programmierung/Tic-Tac-Toe.py", line 25, in boardtostring
oberste_reihe += element ##leerer Inhalt + definierte Mitte
TypeError: can only concatenate str (not "function") to str
Weiß jemand weiter?