@maxmine2
Просто maxmine2

Почему не работает in в python 3?

Здравтсвуйте! Я сделал проверку в крестики-нолики. У меня есть список списков выйгрышных комбинаций. Но, к сожалению, даже одинаковые комбинации in не хочет сравнивать, всегда выдаёт False
win_combos = [
                     [(0, 0), (0, 1), (0, 2)],
                     [(1, 0), (1, 1), (1, 2)],
                     [(2, 0), (2, 1), (2, 2)],
                     [(0, 0), (1, 0), (2, 0)],
                     [(0, 1), (1, 1), (2, 1)],
                     [(0, 2), (1, 2), (2, 2)],
                     [(0, 0), (1, 1), (2, 2)],
                     [(2, 0), (1, 1), (0, 2)]]
        cells = self.field.cells
        xcells = []
        ocells = []
        empty_cells = []
        for row in cells:
            for cell in row:
                if cell.object == PlayingObject.Cross:
                    xcells.append((cell.x, cell.y))
                elif cell.object == PlayingObject.Donut:
                    ocells.append((cell.x, cell.y))
                else:
                    empty_cells.append(cell)
                continue
        for combo in win_combos:
            if ocells in combo: # здесь
                self.draw()
                self.win()
            if xcells in combo: # и здесь
                self.draw()
                self.over()
        if len(empty_cells) == 0:
            self.draw()
            self.gdraw()
  • Вопрос задан
  • 206 просмотров
Решения вопроса 3
total4c
@total4c
Говнокодер
Может быть потому что xcells и ocells это списки.
Ответ написан
@maxmine2 Автор вопроса
Просто maxmine2
Daniil Markelov Да, спасибо большое!

Вот как решил проблему
for combo in win_combos:
            i = 0
            for cell in ocells:
                if cell in combo:  #перебираю каждый элемент для нуля
                    i += 1
                if i == 3:
                    self.draw()
                    self.win()
            i = 0
            for cell in xcells:
                if cell in combo: # также для крестиков
                    i += 1
                if i == 3:
                    self.draw()
                    self.over()
Ответ написан
Комментировать
@o5a
Вместо
for combo in win_combos:
    if ocells in combo: # здесь

нужно проверять наличие самих наборов в win_combos:
if ocells in win_combos:
Аналогично с xcells
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы