【问题标题】:String Formatting - Python字符串格式 - Python
【发布时间】:2013-07-05 00:19:21
【问题描述】:

我有两个字符串,其长度可能因输入而异。我想格式化它们,将它们对齐到中间并用' ' 填充其余空间。每个字符串以^^ 开头和结尾。

案例1:

String1 = Longer String
String2 = Short

需要输出:

^^   Longer String   ^^
^^       Short       ^^

案例2:

String1 = Equal String1
String2 = Equal String2

需要输出:

^^       Equal 1      ^^
^^       Equal 2      ^^

案例3:

String1 =  Short
String2 = Longer String

需要输出:

^^       Short       ^^
^^   Longer String   ^^

在所有三个输出中,长度保持不变,从而保持一致性。

我最初的想法是,这将涉及检查以下格式的两个字符串的长度

if len(String1) > len(String2):
  #Do something
else:
  #Do something else

【问题讨论】:

  • str.center() 有什么问题?

标签: python string python-2.7 printing


【解决方案1】:

只需使用str.center:

assert '^^' + 'Longer String'.center(19) + '^^' == '^^   Longer String   ^^'
assert '^^' + 'Short'.center(19) + '^^'         == '^^       Short       ^^'

【讨论】:

  • 配合字符串可以变化。 string.center(19) 不会硬编码围绕中心的长度值吗?
  • @misguided 是的,但是你想要的宽度的公式是什么?您的所有示例都使用宽度 19,因此此代码解决了原始问题。您能否提供一个长度为 != 19 的输出示例,并回答为什么 EqualLonger String 的宽度都是 19?
  • 很公平。我的例子可能有误导性。我同意你的解决方案。很有帮助 。谢谢。
【解决方案2】:

如果您想引用仅设置两个字符串的居中:

cases=[
    ('Longer String','Short'),
    ('Equal 1','Equal 2'),
    ('Short','Longer String'),
    ]

for s1,s2 in cases:
    w=len(max([s1,s2],key=len))+6
    print '^^{:^{w}}^^'.format(s1,w=w)
    print '^^{:^{w}}^^'.format(s2,w=w)
    print

打印:

^^   Longer String   ^^
^^       Short       ^^

^^   Equal 1   ^^
^^   Equal 2   ^^

^^       Short       ^^
^^   Longer String   ^^

或者,如果你想测试更多字符串的宽度,你可以这样做:

cases=[
    ('Longer String','Short'),
    ('Equal 1','Equal 2'),
    ('Short','Longer String'),
]

w=max(len(s) for t in cases for s in t)+6
for s1,s2 in cases:
    print '^^{:^{w}}^^'.format(s1,w=w)
    print '^^{:^{w}}^^'.format(s2,w=w)
    print 

打印:

^^   Longer String   ^^
^^       Short       ^^

^^      Equal 1      ^^
^^      Equal 2      ^^

^^       Short       ^^
^^   Longer String   ^^

【讨论】:

    【解决方案3】:

    我最终使用了以下对我有用的代码。 19 可以替换为任何数字,具体取决于您希望将字符串格式化为多长时间。

    print "^^",'{:^19}'.format(String1),"^^"
    print "^^",'{:^19}'.format(String2),"^^"
    

    【讨论】:

      猜你喜欢
      • 2021-08-06
      • 1970-01-01
      • 2019-11-28
      • 2011-07-28
      • 2020-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多