【问题标题】:How to format output to create space between two variables in python when printing?打印时如何格式化输出以在python中的两个变量之间创建空间?
【发布时间】:2016-07-20 16:23:13
【问题描述】:

我正在尝试创建一个如下所示的输出:

从这里可以看出,左侧的列空间排列在左侧,右侧的列从右侧排列。但是对于我的输出,我将左列排在右侧,右列排在左侧​​。我想反之亦然。这是我尝试使用格式函数的第二个代码实际得到的输出:

它有效,但我只是想在字符串输出移动时学习调整和格式化间距。 如果我有 3 个以上的变量,知道如何做也很好。

print("Kilograms    Pounds")

for kg in range(0, 199): 
    kg += 1 
    lb = 2.2   
    lb = kg * lb   
    lb = round(lb, 2)
    print(format(kg, "4d"), end = '')

    for i in range(1, 2):
        print("        ", lb, end = '')
    print()

这是我尝试执行此操作的初始代码,但间距被搞砸了,但此处的左列非常好,但在输出增加到两位数后,间距可以在右侧看到。

print("Kilograms    Pounds")

for kg in range(0, 199):
    kg += 1 
    lb = 2.2  
    lb = kg * lb   
    print(kg, '          ', round(lb, 2)) 

输出:

我是 python 新手,所以仍然是一个完整的菜鸟。我真的很感激关于如何处理格式或天气的解释,还有其他选择。 谢谢! 代码:

【问题讨论】:

标签: python python-3.x spacing


【解决方案1】:

试试这个:

between = ' '*4
print('Kilograms{between}Pounds'.format(between=between))

for kg in range(199):
    kg += 1 
    lb = 2.2   
    lb = kg * lb   
    lb = round(lb, 2)

    print('{kg:<{kg_width}}{between}{lb:>{lb_width}}'.format(
        kg=kg, kg_width=len('Kilograms'),
        between=between,
        lb=lb, lb_width=len('Pounds')))

# Output:
# Kilograms    Pounds
# 1               2.2
# 2               4.4
# 3               6.6
# 4               8.8
# 5              11.0
# 6              13.2
# 7              15.4
# 8              17.6
# 9              19.8
# 10             22.0
# 11             24.2
# ...

大而粗糙的打印只是因为我尝试将所有内容参数化。给定固定的列名和间距,您可以这样做:

print('{kg:<9}    {lb:>6}'.format(kg=kg, lb=lb))

编辑

更接近您的原始代码:

print("Kilograms    Pounds")

for kg in range(0, 199):
    kg += 1 
    lb = 2.2   
    lb = kg * lb   
    lb = round(lb, 2)
    print(format(kg, "<4d"), end = '')
    print("        ", end = '')
    print(format(lb, ">7.1f"))

【讨论】:

  • 谢谢!这是一种有趣的方式,学习了很多不同的方式。那么,如果我按照自己的方式去做,或者这不是我的代码中的正确方式?我想知道我在哪里犯了错误
  • 你的代码是哪个版本的?他们有不同的问题。 :-)
  • 我在字符串中使用格式的第一个。我不认为我完全理解格式
  • 查看我一秒钟前的编辑。在底部,我对您的代码进行了更小的更改。
  • (如果你愿意,你也可以去掉d.1f,因为你的数字已经按照你想要的方式格式化了。)
【解决方案2】:

查看The Docs 第 7.1.3.1 节

您可以将 format()width 作为 int 传递,这应该可以解决您的空白问题。

来自文档示例:

>>> for num in range(5,12):
 for base in 'dXob':
     print('{0:{width}{base}}'.format(num, base=base, width=width),end=' ')

产生:

 5     5     5   101
 6     6     6   110
 7     7     7   111
 8     8    10  1000
 9     9    11  1001
10     A    12  1010
11     B    13  1011

【讨论】:

    【解决方案3】:

    你可以用这个。

    print("Kilograms    Pounds")
    
    for kg in range(0, 100):
        kg += 1 
        lb = 2.2  
        lb = kg * lb 
        space_filler = " " * 10  
        print("%3d %s %.2f" % (kg, space_filler, lb))
    

    也可以使用format 使值3 动态化,这比% 构造更灵活。

    【讨论】:

    • 我在 java 中使用了非常相似的方式,但那是很久以前的事了。你能解释一下 % 在这里是如何工作的吗?知道格式也会很方便。我已经阅读了文档,但是当它是我的代码时,它更容易理解。谢谢!
    • % 几乎就像 C 格式说明符。您有许多 % 格式说明符(例如上面的 %3d ),然后给出具有那么多值的元组要插入,% sigin 介于两者之间。例如,在上面的代码中,kg 将被格式化为“%3d”,space_filler 为 %s,lb 为 %.2f。
    • @smarx 谢谢,我只需要一个例子来了解它是如何工作的
    • @DurgaDatta 我明白了,现在当我将 %3d 增加到 %4d 时,它将与达到 1000 的数字对齐。
    • @Dmitriy 雅。使用 str.format 更加灵活和动态。您可以阅读更多相关信息。 % 是更灵活、更全面的string.format 的一个方便子集。
    猜你喜欢
    • 2012-04-15
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    • 2017-07-20
    • 2015-04-24
    相关资源
    最近更新 更多