【问题标题】:How would I align two outputs in Python 3?如何在 Python 3 中对齐两个输出?
【发布时间】:2019-08-06 20:17:01
【问题描述】:

如何在 Python 3 中将两个不同的输出并排对齐?

输入:

def Pokemon_Output(user_pkmn):

print("ID#",pkmn[user_pkmn][0])
print("Name:",pkmn[user_pkmn][1])
print("Type 1:",pkmn[user_pkmn][2])`
print("Type 2:",pkmn[user_pkmn][3])
print("Total:",pkmn[user_pkmn][4])
print("HP:",pkmn[user_pkmn][5])
print("Attack:",pkmn[user_pkmn][6])
print("Defense:",pkmn[user_pkmn][7])
print("Sp. Atk:",pkmn[user_pkmn][8])
print("Sp. Def:",pkmn[user_pkmn][9])
print("Speed:",pkmn[user_pkmn][10])
print("Legendary:",pkmn[user_pkmn][12])

def Second_Pokemon_Output(second_user_pkmn):
print("ID#",pkmn[second_user_pkmn][0])
print("Name:",pkmn[second_user_pkmn][1])
print("Type 1:",pkmn[second_user_pkmn][2])
print("Type 2:",pkmn[second_user_pkmn][3])
print("Total:",pkmn[second_user_pkmn][4])
print("HP:",pkmn[second_user_pkmn][5])
print("Attack:",pkmn[second_user_pkmn][6])
print("Defense:",pkmn[second_user_pkmn][7])
print("Sp. Atk:",pkmn[second_user_pkmn][8])
print("Sp. Def:",pkmn[second_user_pkmn][9])
print("Speed:",pkmn[second_user_pkmn][10])
print("Legendary:",pkmn[second_user_pkmn][12])

当前输出:

ID# 4
Name: Charmander
Type 1: Fire
Type 2:
Total: 309
HP: 39
Attack: 52
Defense: 43
Sp. Atk: 60
Sp. Def: 50
Speed: 65
Legendary: Not Legendary

ID# 1
Name: Bulbasaur
Type 1: Grass
Type 2: Poison
Total: 318
HP: 45
Attack: 49
Defense: 49
Sp. Atk: 65
Sp. Def: 65
Speed: 45
Legendary: Not Legendary

我的想法是将两个输出并排对齐,而不管输入是什么。像这样的:

ID# 4                       ID# 1
Name: Charmander            Name: Bulbasaur
Type 1: Fire                Type 1: Grass
Type 2:                     Type 2: Poison
Total: 309                  Total: 318
HP: 39                      HP: 45
Attack: 52                  Attack: 49
Defense: 43                 Defense: 49
Sp. Atk: 60                 Sp. Atk: 65
Sp. Def: 50                 Sp. Def: 65
Speed: 65                   Speed: 45
Legendary: Not Legendary    Legendary: Not Legendary

在那之后我打算做一些分析比较两个口袋妖怪之间的统计数据,但我真正想做的只是调整所有内容。感谢您的帮助!

【问题讨论】:

  • 意见角:一旦您的输出需求变得比“在连续行上打印文本”更复杂,就该切换到 GUI。最好使用带有两个文本区域的窗口,而不是试图说服控制台打印多列。
  • format 函数提供了你所需要的一切。你的问题可能是重复的。搜索“格式化输出”应该会给 stackoverflow 带来很多命中。
  • @Kevin Neighbor 意见角:我可以想象,即使对于一些简单的表格,控制台输出仍然可以。与空间填充的最小长度变量一起使用的格式或 f 字符串可以。我发现所有这些打印语句的两个独立函数更值得商榷。以两个数据框为参数的一个将是(imo)正确方向的第一步
  • @SpghttCd 正如你所描述的,我有大量格式化的控制台输出......一个示例复杂的基本格式字符串是"%-9s %-{}s %8.4f%% (%{}i/%{}i)",在计算变量字段的适当长度后传递给.format ,然后到% 以填充数据。 Boom,自动调整大小的可变宽度的表格,在一个重复使用十几次的函数中需要大约 15 LOC。我可以为该工具编写一个 GUI 吗?当然可以,但考虑到大部分输出都出现在错误跟踪器中,它只支持等宽文本:它生成的表格可以直接复制粘贴。

标签: python vertical-alignment


【解决方案1】:

我建议您使用数据集的属性名称作为 pandas 数据框pkmn 的索引,例如:

                    user1           user2
ID                      4               1
Name           Charmander       Bulbasaur                   
Type 1               Fire           Grass                   
Type 2                NaN          Poison                   
Total                 309             318                   
HP                     39              45                   
Attack                 52              49                   
Defense                43              49                   
Sp. Atk                60              65                   
Sp. Def                50              65                   
Speed                  65              45                   
Legendary   Not Legendary   Not Legendary

完成后,您的打印功能缩小到

print(df.loc[:, users])

例如

users = ['user1', 'user2']

【讨论】:

    【解决方案2】:

    您必须在一个函数中打印两者。

    你需要这样的东西:

    def Pokemon_Output(first_pkmn, second_pkmn):
        column1 = "ID#" + pkmn[user_pkmn][0]
        column2 = "ID#" + pkmn[second_user_pkmn][0]
        print_line(column1, column2)
        column1 = "Name:" + pkmn[user_pkmn][1]
        column2 = "Name:" + pkmn[second_user_pkmn][1]
        print_line(column1, column2)
        .
        .
        .
    
    def print_line(column1, column2):   
        print('{:<25s}{:<25s}'.format(column1, column2))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-07
      • 2022-01-11
      • 2020-04-12
      • 2019-10-05
      • 2022-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多