Seite 1 von 1
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
Verfasst: Sonntag 16. August 2020, 18:34
von Eragpm
hi
Ich versuche gerade ein Tictactoe spiel zu schreiben und versuche gerade ein Spielfeld auszugeben und bin gerade am verzweilfen.
Hier mein Code
Code: Alles auswählen
class Board:
def __init__(self):
self.state = [1, 0, -1, 0, 0, 0, 0, 0, 0]
def sign_to_printable(self, sign):
if sign == 0:
print(" ")
elif sign == 1:
print("O")
elif sign == -1:
print("X")
def print_board(self):
print(self.sign_to_printable(self.state[0]) + " | "
+ self.sign_to_printable(self.state[1])+ " | "
+ self.sign_to_printable(self.state[2]))
if __name__=="__main__":
board1 = Board()
board1.print_board()
es gibt einen TypeError: unsupported operand type(s) for +: 'NoneType' and 'str' Error zurück und ich hab keine Ahnung wie ich das ändern kann.
Re: TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
Verfasst: Sonntag 16. August 2020, 18:44
von __deets__
Du musst dich halt entscheiden, ob sign_to_printable selbst printen soll, oder ob es stattdessen das Element an der Stelle zurueckgeben soll, damit du das dann ausserhalb in print_board ausgeben kannst. Du machst gerade beides, und gibst nix zurueck - daher das None.
Wobei ich die Frage stellen wuerde: warum kodierst du die besetzten Positionen nicht direkt mit den Werten " ", "X", "O"? Dann sparst du dir zumindest fuer die Ausgabe die Kodierung, und einen echten Mehrwert der Zahlen kann ich jetzt auch nicht erkennen.
Re: TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
Verfasst: Sonntag 16. August 2020, 18:47
von Sirius3
Warum hat board1 eine 1? Soll das Parallel-Tictactoe werden? Lass unnötige Anhängsel einfach weg. sign_to_printable hat mehrere Probleme. Der Name passt nicht zu dem was die Funktion macht und damit kommt auch der Aufrufende nicht zurecht. Da wird was geprintet und nicht was zu einem printable konvertiert. Dann ist das gar keine Methode, weil kein self benutzt wird. Warum steht in state nicht gleich "X", "O" und " "? print_board würde dann auch nur einen kleinen Teil des Boards ausgeben.
Re: TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
Verfasst: Sonntag 16. August 2020, 21:40
von Eragpm
wie soll das funktieren wenn ich gleich die Symbole hinmach
man soll das ja spielen können und ich hab halt gedacht das ich Player 1 dann 1 als sign gebe und Player 2 -1 als sign und das board1 is da weil ich einfach mal wähernd des schreibens das Spielbrett ausgeben wollte.
Re: TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
Verfasst: Sonntag 16. August 2020, 21:50
von __blackjack__
@Eragpm: Das funktioniert dann einfach ohne diese Indirektion über Zahlen. Statt eine Zahl zu einem Zeichen zu wandeln, stehen dann schon direkt die Zeichen in der Datenstruktur.
Re: TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
Verfasst: Sonntag 16. August 2020, 21:59
von Sirius3
Warum muss es denn board1 heißen, damit du es ausgeben kannst? Mit board geht das genauso. Spieler 1 ist X und Spieler 2 O.
Re: TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
Verfasst: Sonntag 16. August 2020, 22:01
von __deets__
Und wenn du dem Spieler 1 das X und dem Spieler 2 das O gibst, dann funktioniert das genauso. Nur weil du mal was gedacht hast, muss das doch nicht auf ewig so bleiben. Vor allem nicht, wenn es keinerlei sichtbaren Vorteil gibt.
Re: TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
Verfasst: Sonntag 16. August 2020, 22:38
von Eragpm
ah danke für die Information, da hab ich wohl zu umständlich gedacht