Python中如何对齐打印字典键与对应值?纸牌游戏界面优化求助
解决纸牌游戏界面对齐显示的问题
我来帮你搞定这个界面排版的问题!你想要的是把所有键放在一行,对应的卡牌和剩余数量分别在下两行对齐,之前直接打印列表的方式确实会因为列表自带的格式显得很乱,咱们用字符串拼接的方式就能完美实现需求。
核心思路
我们需要分别收集三行的内容:
- 第一行:所有字典的键(A-H),用空格分隔
- 第二行:每个键对应的顶部卡牌(格式如
[♦9]),空的时候显示[tom] - 第三行:每个键对应的剩余卡牌数量,用空格分隔
然后用' '.join()把每行的元素拼接成整齐的字符串,这样就能保证每行的内容对齐了。
修改后的代码实现
FireKort ={ 'A': None,#in my code i have the cards as objects here with value #and type 'B': None,#ex. object1: 8, cloves; object2: King, hearts 'C': None, 'D': None, 'E': None, 'F': None, 'G': None, 'H': None } def f_printK(): global FireKort # 初始化三个列表分别存储三行的内容 keys_row = [] cards_row = [] counts_row = [] # 按顺序遍历键(确保A-H的顺序,避免字典顺序问题) for key in sorted(FireKort.keys()): keys_row.append(key) # 处理剩余数量:如果是None则显示0,否则显示长度 if FireKort[key] is None: count = '0' card_display = '[tom]' else: count = str(len(FireKort[key])) # 处理卡牌显示:如果有卡牌则显示顶部的,否则显示tom try: top_card = FireKort[key][0] card_display = f'[{top_card.sort}{top_card.valør}]' except IndexError: card_display = '[tom]' cards_row.append(card_display) counts_row.append(count) # 拼接并打印每一行 print(' '.join(keys_row)) print(' '.join(cards_row)) print(' '.join(counts_row))
关键细节说明
- 顺序保证:用
sorted(FireKort.keys())遍历,确保键按A到H的顺序排列,避免因为字典插入顺序(Python3.7+)可能带来的混乱 - 空值处理:针对
FireKort[key]为None或者空列表的情况,分别处理显示内容,避免报错 - 对齐效果:因为每个元素的宽度一致(键是1字符,卡牌显示是5字符
[xx],数量是1字符),用空格拼接后自然对齐,完全符合你想要的效果 - 替代列表直接打印:
' '.join()会把列表元素转换成无格式的字符串,解决了你之前直接打印列表时出现的括号、逗号问题
测试一下,当你的卡牌对象填充后,就能输出和你期望一致的效果:
A B C D E F G H
[♦9][♣A][♠Q][♣8][♦8][♣J][♣10][♦7]
4 4 4 4 4 4 4 4
内容的提问来源于stack exchange,提问作者Ulrik Aase
相关产品推荐
相关产品推荐

