Игнорирование условия в теле класса

Задача: написать итератор, возвращающий колоду карт
Пишу код

class CardDeck:
    def __init__(self):
        self.mast = ['пик', "треф", 'бубен', 'червей']
        self.kard = ['двойка', 'тройка', 'четверка', 'пятерка', 'шестерка',
                     'семерка', 'восьмерка', 'девятка', 'десятка', 'валет',
                     'дама', 'король', 'туз']
        self.ind_k = -1
        self.ind_m = 0

    def __iter__(self):
        return self

    def __next__(self):
        self.ind_k += 1

        if self.ind_k == 13:
            self.ind_k += 1
            self.ind_m = 0

        if self.ind_m == 4:
            raise StopIteration

        return self.kard[self.ind_k] + ' ' + self.mast[self.ind_m]

cards = list(CardDeck())

Происходит исключение IndexError: list index out of range. В отладчике ind_k == 13. Вопрос почему не срабатывает условие if ind_k == 13 ? ChatGPT сказал, например, что я сначала проверяю, а потом прибавляю, и надо бы исправить и сделать наеборот. И выдал код, идентичный моему =) введите сюда описание изображения


Ответы (1 шт):

Автор решения: mrgervant

У Вас ind_k не сбрасывается в 0, чтобы начать заново итерацию по списку карт, а добавляется +1. Вот индекс и перепрыгивает, выдавая ошибку IndexError: list index out of range. Нужно поменять местами действия с индексами списка карт и мастей:

if self.ind_k == 13:
    self.ind_k = 0   # было += 1
    self.ind_m += 1  # было = 0
→ Ссылка