В настоящее время я все еще изучаю Python, а точнее ООП, и мой учитель поручил моему классу создать консольное представление терпения (или пасьянса).Я достаточно уверен в объектах, методах и т. Д., Но есть одна конкретная проблема, с которой у меня возникают проблемы.
Чтобы отобразить каждую таблицу в игре, я пытаюсь использовать цикл, который будет выплевывать каждую картув отдельных строках:
noColumns = 0
for tableau in self.tableaus:
if len(tableau) > noColumns:
noColumns = len(tableau)
for column in range(noColumns):
if column == 0:
print('S ', self.tableaus[0][column].showCard(), self.tableaus[1][column].showCard(), self.tableaus[2][column].showCard(), self.tableaus[3][column].showCard(),
self.tableaus[4][column].showCard(), self.tableaus[5][column].showCard(), self.tableaus[6][column].showCard(), ' HF')
elif column > 0 and column < 4:
try:
print(self.waste[column-1].showCard(), ' ', self.tableaus[0][column].showCard(), self.tableaus[1][column].showCard(), self.tableaus[2][column].showCard(), self.tableaus[3][column].showCard(),
self.tableaus[4][column].showCard(), self.tableaus[5][column].showCard(), self.tableaus[6][column].showCard(), (self.gameAttributes['Suits'][column]+'F'))
except:
print(' ', self.tableaus[0][column].showCard(), self.tableaus[1][column].showCard(), self.tableaus[2][column].showCard(), self.tableaus[3][column].showCard(),
self.tableaus[4][column].showCard(), self.tableaus[5][column].showCard(), self.tableaus[6][column].showCard(), (self.gameAttributes['Suits'][column]+'F'))
Где tableaus - это список из 7 подсписков, которые могут содержать отдельные объекты карт в зависимости от перемещения карт игроком.Я уже пытался отлавливать любые исключения, используя показанные в статье предложения try / исключением, однако я понял, что независимо от того, сколько исключений я пытаюсь отловить, просто существует слишком много возможностей для множества карт в каждой таблице.Следовательно, поскольку первая таблица всегда начинается с одной карты, первая строка отображается как
S JS X X X X X X HF
, но как только цикл для пытается выполнить итерациючерез следующие карточки он ловит IndexError :
Traceback (most recent call last):
File "C:\Users\xxxxxx\Desktop\solitaire or patience.py", line 67, in gameDisplay
print(self.waste[column-1].showCard(), ' ', self.tableaus[0][column].showCard(), self.tableaus[1][column].showCard(), self.tableaus[2][column].showCard(), self.tableaus[3][column].showCard(),
IndexError: list index out of range
Есть ли у кого-нибудь альтернативное предложение о том, как я мог бы реализовать этот код, чтобы игнорировать или заменять неиндексированные значения пробелами, или альтернативныйподходить в целом?
Большое спасибо за то, что даже прочитали это далеко!
РЕДАКТИРОВАТЬ - Минимальный пример:
tableaus = [[0],[0,1],[0,1,2],[0,1,2,3],[0,1,2,3,4],[0,1,2,3,4,5],[0,1,2,3,4,5,6]]
longest = 0
for tableau in tableaus:
if len(tableau)>longest:
longest = len(tableau)
for column in range(longest):
print('S ', tableaus[0][column], tableaus[1][column], tableaus[2][column], tableaus[3][column],
tableaus[4][column], tableaus[5][column], tableaus[6][column], ' HF')