Игнорирование условия в теле класса
Задача: написать итератор, возвращающий колоду карт
Пишу код
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