• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Python, kółko i krzyżyk, IndexError: string out of range

Aruba Cloud PRO i VPS, Openstack, VMWare, MS Hyper-V
+1 głos
113 wizyt
pytanie zadane 30 stycznia 2022 w Python przez Michalski9 Początkujący (280 p.)
zamknięte 30 stycznia 2022 przez Michalski9

Witam, 

mam problem, którego nie umiem rozwiązać. Piszę grę kółko i krzyżyk. Mam dwa pliki new_kurs.py zawierający:

import new_kurs as Board

print("Zacznijmy grę:")
player = input("Kto ma zacząć X czy 0: ")

board = Board.Board(player.upper())

while (not board.check_if_win()) and (not board.check_if_draw()):
    board.show_board()
    #x,y = [int(x) for x in input("Podaj współżędne pola na którym chcesz postawić X bądź 0: ").split(" ")]
    x = int(input('Podaj x: '))
    y = int(input('Podaj y: '))
    board.put_to_board(x,y)

board.show_board()
print()
if board.check_if_win():
    if board.get_player() == "X":
        print("Wygrał 0")
    else:
        print("Wybrał X")

else:
    print("Remis nikt nie wygrał.")

i plik executer.py:

class Board:

    def __init__(self, player):
        self.board = [[".", ".", "."], [".", ".", "."], [".", ".", "."]]
        self.player = player
        self.win = False

    def check_if_win(self):
        for x in range(0, 3):
            if self.board[x][0] == self.board[x][1] and self.board[x][1] == self.board[x][2] and (
                    self.board[x][2] == "X" or self.board[x][2] == "O"):
                self.win = True
                return True

        for y in range(0, 3):
            if self.board[y][0] == self.board[y][1] and self.board[y][1] == self.board[y][2] and (
                    self.board[y][2] == "X" or self.board[y][2] == "O"):
                self.win = True
                return True

        if self.board[0][0] == self.board[1][1] and self.board[1][1] == self.board[2][2] and (
                self.board[2][2] == "X" or self.board[2][2] == "O"):
            self.win = True
            return True

        if self.board[0][2] == self.board[1][1] and self.board[1][1] == self.board[2][0] and (
                self.board[2][0] == "X" or self.board[2][0] == "O"):
            self.win == True
            return True

        return False

    def check_if_draw(self):
        if not self.check_if_win():
            for row in self.board:
                for element in row:
                    if element == ".":
                        return False
            return True
        else:
            return False

    def show_board(self):
        print(" 1 2 3")
        numberRow = 1
        for row in self.board:
            print(numberRow, end=" ")
            for element in row:
                print(element, end=" ")
            print()
            numberRow += 1

    def check_if_free(self, x, y):
        return self.board[x - 1][
                   y - 1] == "."  # minus jeden dlatego, że gracz nie wie, że tablice zaczynają się od zawierja

    def change_player(self):
        if self.player == "O":
            self.player = "X"
        else:
            self.player = "O"

    def put_to_board(self, x, y):
        if self.check_if_free(x, y):
            self.board = self.player
            self.change_player()

    def get_player(self):
        return self.player

i mam błąd

I nie jestem w stanie znaleźć błędu, czy ktoś może widzi coś co mi umyka?

komentarz zamknięcia: rozwiązane

1 odpowiedź

+2 głosów
odpowiedź 30 stycznia 2022 przez adrian17 Ekspert (327,560 p.)
wybrane 5 lutego 2022 przez Michalski9
 
Najlepsza
    def put_to_board(self, x, y):
        if self.check_if_free(x, y):
            self.board = self.player
            self.change_player()

self.board wcześniej było listą list, a teraz przypisujesz tutaj stringa :)

1
komentarz 30 stycznia 2022 przez Michalski9 Początkujący (280 p.)
Dzięki <3

Podobne pytania

0 głosów
1 odpowiedź 678 wizyt
pytanie zadane 6 czerwca 2019 w Python przez Ventre90 Obywatel (1,170 p.)
0 głosów
1 odpowiedź 1,168 wizyt
pytanie zadane 2 listopada 2019 w Python przez KitoPlayerPL Nowicjusz (150 p.)
+1 głos
1 odpowiedź 155 wizyt
pytanie zadane 5 kwietnia 2022 w Python przez qwert 100 Obywatel (1,210 p.)

90,303 zapytań

138,899 odpowiedzi

311,088 komentarzy

60,017 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...