如何并排打印我的 ascii 卡?
Posted
技术标签:
【中文标题】如何并排打印我的 ascii 卡?【英文标题】:How can I print my ascii cards side by side? 【发布时间】:2021-12-24 23:51:25 【问题描述】:我用 python 做了一个简单的二十一点游戏。我制作了游戏的其余部分,但我正在努力放入 ascii 卡,所以这只是代码的一小部分。我尝试将 * len(phand) 放在附加行的末尾。虽然这确实给了我多张并排的卡片,但它似乎不允许我编辑它们。
#Phand is the hand you draw so it could be any combination of cards
phand = ["2 of Hearts", "King of Diamonds", "Ace of Clubs"]
print(phand)
for xx in range(0, len(phand)):
pcarddisplay = []
pcarddisplay.append("┌─────────┐")
pcarddisplay.append("│. . .│")
pcarddisplay.append("│. . . . .│")
pcarddisplay.append("│. . . . .│")
pcarddisplay.append("│. . . .│")
pcarddisplay.append("│. . . . .│")
pcarddisplay.append("│. . . . .│")
pcarddisplay.append("│. . .│")
pcarddisplay.append("└─────────┘")
x = ("│.", phand[xx][:1], ". . . .│")
pcarddisplay[1] = "".join(x)
x = ("│. . . .", phand[xx][:1], ".│")
pcarddisplay[7] = "".join(x)
if "Diamonds" in phand[xx]:
pcarddisplay[4] = "│. . ♦ . .│"
if "Clubs" in phand[xx]:
pcarddisplay[4] = "│. . ♣ . .│"
if "Hearts" in phand[xx]:
pcarddisplay[4] = "│. . ♥ . .│"
if "Spades" in phand[xx]:
pcarddisplay[4] = "│. . ♠ . .│"
print("\n".join(pcarddisplay))
这个输出:
['2 of Hearts', 'King of Diamonds', 'Ace of Clubs']
┌─────────┐
│.2. . . .│
│. . . . .│
│. . . . .│
│. . ♥ . .│
│. . . . .│
│. . . . .│
│. . . .2.│
└─────────┘
┌─────────┐
│.K. . . .│
│. . . . .│
│. . . . .│
│. . ♦ . .│
│. . . . .│
│. . . . .│
│. . . .K.│
└─────────┘
┌─────────┐
│.A. . . .│
│. . . . .│
│. . . . .│
│. . ♣ . .│
│. . . . .│
│. . . . .│
│. . . .A.│
└─────────┘
我怎样才能将这些并排打印出来?
【问题讨论】:
您可以将每一行附加到像pcarddisplay[4] = pcarddisplay[4] + "│. . X . .│"
这样的“保留”变量中,然后一次性打印出来
【参考方案1】:
您必须更改代码才能生成一张卡片(此处为 mk_card
函数)。
然后生成所有卡片块并使用zip
和join
的组合来生成行:
phand = ["2 of Hearts", "King of Diamonds", "Ace of Clubs"]
def mk_card(s):
pcarddisplay = []
pcarddisplay.append("┌─────────┐")
pcarddisplay.append("│. . .│")
pcarddisplay.append("│. . . . .│")
pcarddisplay.append("│. . . . .│")
pcarddisplay.append("│. . . .│")
pcarddisplay.append("│. . . . .│")
pcarddisplay.append("│. . . . .│")
pcarddisplay.append("│. . .│")
pcarddisplay.append("└─────────┘")
x = ("│.", s[:1], ". . . .│")
pcarddisplay[1] = "".join(x)
x = ("│. . . .", s[:1], ".│")
pcarddisplay[7] = "".join(x)
if "Diamonds" in s:
pcarddisplay[4] = "│. . ♦ . .│"
if "Clubs" in s:
pcarddisplay[4] = "│. . ♣ . .│"
if "Hearts" in s:
pcarddisplay[4] = "│. . ♥ . .│"
if "Spades" in s:
pcarddisplay[4] = "│. . ♠ . .│"
return pcarddisplay
print('\n'.join(map(' '.join, zip(*(mk_card(c) for c in phand)))))
输出:
┌─────────┐ ┌─────────┐ ┌─────────┐
│.2. . . .│ │.K. . . .│ │.A. . . .│
│. . . . .│ │. . . . .│ │. . . . .│
│. . . . .│ │. . . . .│ │. . . . .│
│. . ♥ . .│ │. . ♦ . .│ │. . ♣ . .│
│. . . . .│ │. . . . .│ │. . . . .│
│. . . . .│ │. . . . .│ │. . . . .│
│. . . .2.│ │. . . .K.│ │. . . .A.│
└─────────┘ └─────────┘ └─────────┘
【讨论】:
非常感谢您的快速回复。这很好用,谢谢。 不客气@ORKUNCIRAK 快乐编码 ;) 很好的机会来展示map
和生成器表达式之间的关系。答案两者都用。如果您更喜欢生成器表达式,它将是 print('\n'.join(' '.join(mc) for mc in zip(*(mk_card(c) for c in phand))))
,如果您更喜欢 map()
:print('\n'.join(map(' '.join, zip(*map(mk_card, phand)))))
以上是关于如何并排打印我的 ascii 卡?的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server Management Studio中的垂直选项卡 - 并排查询和结果?