我正在设置一个纸牌游戏,我试图找出一些方法可以打印列格式的每张卡片列表。关于如何使用以下列表进行此操作的任何想法?
[6♦]
[2♣, 6♠, A♣, 7♣, J♣, XX]
[4♥, 2♥, 4♠, 8♣, 5♦, XX, XX]
[5♠, 3♦, A♠, 10♦, 3♠, XX, XX, XX]
[7♥, 10♣, 10♥, 2♦, J♠, XX, XX, XX, XX]
[8♦, 3♣, 7♦, 9♥, K♠, XX, XX, XX, XX, XX]
[7♠, Q♠, 9♠, A♦, 3♥, XX, XX, XX, XX, XX, XX]
答案 0 :(得分:3)
对你的代码中可用的内容以及你想做的事情进行一些猜测,我会说你应该从一行中的每个列表中打印一个元素,然后转到下一个列表。
# -*- coding: utf-8 -*-
from itertools import izip_longest
L1 = [u'6♦']
L2 = [u'2♣', u'6♠', u'A♣', u'7♣', u'J♣', u'XX']
L3 = [u'4♥', u'2♥', u'4♠', u'8♣', u'5♦', u'XX', u'XX']
for a,b,c in izip_longest(L1, L2, L3, fillvalue=' '):
print u'{0}\t{1}\t{2}'.format(a,b,c)
几乎没有变化,你应该得到你想要的东西。但是对于更严肃的终端游戏UI,您应该考虑使用python curses。
答案 1 :(得分:2)
正如其他人所说,itertools.zip_longest
绝对是您正在寻找的
from itertools import zip_longest
stacks = [
['6♦'],
['2♣', '6♠', 'A♣', '7♣', 'J♣', 'XX'],
['4♥', '2♥', '4♠', '8♣', '5♦', 'XX', 'XX'],
['5♠', '3♦', 'A♠', '10♦', '3♠', 'XX', 'XX', 'XX'],
['7♥', '10♣', '10♥', '2♦', 'J♠', 'XX', 'XX', 'XX', 'XX'],
['8♦', '3♣', '7♦', '9♥', 'K♠', 'XX', 'XX', 'XX', 'XX', 'XX'],
['7♠', 'Q♠', '9♠', 'A♦', '3♥', 'XX', 'XX', 'XX', 'XX', 'XX', 'XX']
]
for cards in zip_longest(*stacks,fillvalue=""):
print(" ".join("%3s"%c for c in cards))
导致此输出:
6♦ 2♣ 4♥ 5♠ 7♥ 8♦ 7♠
6♠ 2♥ 3♦ 10♣ 3♣ Q♠
A♣ 4♠ A♠ 10♥ 7♦ 9♠
7♣ 8♣ 10♦ 2♦ 9♥ A♦
J♣ 5♦ 3♠ J♠ K♠ 3♥
XX XX XX XX XX XX
XX XX XX XX XX
XX XX XX XX
XX XX XX
XX XX
XX