Отказ от ответственности: я относительно новый пользователь Python и программист в целом.
Я строю класс для колоды карт, а для метода __str__
я хочу вернуть символы ascii для карт, находящихся в колоде, в виде тринадцати рядов из четырех столбцов. Позже мне понадобится аналогичная логика при отображении рук игроков, когда я на самом деле использую этот класс для игры. Я надеюсь найти способ сделать это, когда число столбцов является переменным, а количество строк зависит от количества столбцов и длины списка (или, проще говоря, просто останавливается, когда не хватает карт). Таким образом, он будет работать для моего __str__
возврата с 4 столбцами и рукой игрока с переменным числом столбцов.
Поскольку я только хочу понять логику, чтобы сделать это, я упростил проблему до кода ниже. Я провел немало исследований, но я не нашел такого примера, который мог бы понять или который не использует импортированные библиотеки. Я научился использовать запятую после оператора print, чтобы предотвратить форсирование новой строки, но даже с этим инструментом я не могу найти способ заставить эту работу использовать циклы for и while. Я также вставлю код из моего окончательного варианта использования. Это всего лишь пример многих, которые не сработали, и, вероятно, это отвратительно, но это то, где я нахожусь.
Упрощенный вариант использования:
# Each string in each list below would actually be one line of ascii art for
# the whole card, an example would be '|{v} {s} |'
deck = [['1','2','3','4'],
['5','6','7','8'],
['9','10','11','12'],
['a','b','c','d'],
['e','f','g','h'],
['i','j','k','l']]
# expected output in 3 columns:
#
# 1 5 9
# 2 6 10
# 3 7 11
# 4 8 12
#
# a e i
# b f j
# c g k
# d h l
#
# expected output in 4 columns:
#
# 1 5 9 a
# 2 6 10 b
# 3 7 11 c
# 4 8 12 d
#
# e i
# f j
# g k
# h l
Конечный вариант использования:
def __str__(self):
# WORKS empty list to hold ascii strings
built_deck = []
# WORKS fill the list with ascii strings [card1,card2,card3,card4...]
for card in self.deck:
built_deck.append(self.build_card(str(card[0]),str(card[1:])))
# WORKS transform the list to [allCardsRow1,allCardsRow2,allCardsRow3,allCardsRow4...]
built_deck = list(zip(*built_deck))
# mark first column as position
position = 1
# initialize position to beginning of deck
card = 0
# Try to print the table of cards ***FAILURE***
for item in built_deck:
while position <= 4:
print(f'{item[card]}\t',)
card += 1
continue
position = 1
print(f'{item[card]}')
card += 1
#return built_deck