0

嘿伙计们,我需要一些帮助来对齐我的整数。我将向您展示我的代码是什么,我的输出是什么,以及我希望我的输出是什么。谢谢!

代码:

test_sign='#'
test_numbers=[100000,5000000,7000000]
test_calc_list=[]
test_sum=sum(test_numbers)
test_list=['Testcase1','Testcase2','Testcase3']
test_sign_list=[]

for x in test_numbers:
    test_calc=round((x/float(test_sum)*10))
    test_calc_list.append(test_calc)

for y in test_calc_list:
    y=int(y)
    signs=y*test_sign
    test_sign_list.append(signs)

for z in range(len(test_list)):
    print "%8s"%test_list[z]+":",test_sign_list[z],test_numbers[z]

输出:

Testcase1:  100000
Testcase2: #### 5000000
Testcase3: ###### 7000000

期望的输出:

Testcase1:         100000
Testcase2: ####   5000000
Testcase3: ###### 7000000
4

4 回答 4

4

选项一,以格式指定长度:

http://docs.python.org/2/library/string.html#format-specification-mini-language

“宽度是定义最小字段宽度的十进制整数。如果未指定,则字段宽度将由内容确定。”

选项二,使用 ljust、rjust 和 center 预填充字符串:

http://docs.python.org/2/library/string.html#string.ljust

于 2013-04-19T01:18:27.930 回答
4

这可能是学习{}-formatting 的好时机,而不是更深入地学习(不完全弃用,但不鼓励)%-formatting。

%特别是因为您使用的唯一格式似乎不正确。(没有充分的理由使用%8s您知道将是 9 个字符长的字符串……)

所以:

print '{}: {:<6} {:>7}'.format(test_list[z], test_sign_list[z], test_numbers[z])

有关所有选项的详细信息,请参阅字符串格式


作为旁注,我认为您的循环以这种方式更具可读性:

for test, sign, number in zip(test_list, test_sign_list, test_numbers):
    print '{}: {:<6} {:>7}'.format(test, sign, number)
于 2013-04-19T01:24:48.997 回答
1

改变

print "%8s"%test_list[z]+":",test_sign_list[z],test_numbers[z]

print "%8s: %-6s %7i" % (test_list[z], test_sign_list[z], test_numbers[z])
于 2013-04-19T01:21:58.700 回答
0
strings = ["abc", "sakjfslkdfnds", "7"]
maxlength = max(map(len, strings))
for index, string in enumerate(strings):
  print("Testcase%d: %s" % (index, string.rjust(maxlength, ".")))

省略“。” 如果您只想要空格,请争论。

于 2013-04-19T01:18:23.277 回答