2013-04-19 41 views
0

嘿家伙我需要一些帮助对齐我的整数。我会告诉你我的代码是什么,我的输出是什么,以及我希望输出的是什么。谢谢!对齐整数(基本python)

代码:

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 
+1

作为一个侧面说明,而不是'在范围Z(LEN(test_list)):'和使用'test_list [z]','test_sign_list [z]','test_numbers [z]',尝试'用于测试,符号,zip中的数字(test_list,test_sign_list,test_numbers):'的复杂表达式, 'test','sign'和'number'。 – abarnert

回答

4

选项之一,在格式指定长度:

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

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

选择二,使用ljust,rjust和中心垫预字符串:

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

+1

“格式(case_name,one_number,another_number)”特别类似于“”{0:8}:{1:> 10d} {2:> 10d}“,会为case名称生成8个字符宽的列,并生成两个10个字符两个数字的宽右对齐列。 – 9000

+0

@ 9000:我知道你从OP的'%8s'中拿了那个'{0:8}'......但是如果你看看它,他的字符串都是9个字符宽,所以你可能不想要那个(和他或许他不想在他的原始代码中使用'8') – abarnert

0
strings = ["abc", "sakjfslkdfnds", "7"] 
maxlength = max(map(len, strings)) 
for index, string in enumerate(strings): 
    print("Testcase%d: %s" % (index, string.rjust(maxlength, "."))) 

离开了如果你只是想要空间的话。

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]) 
3

这可能是一个好时机学习{} -formatting,而不是学习更多 - 深入了解(不完全不赞成,但气馁)% -formatting。

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

所以:

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

对所有选项的详细信息,请参阅String Formatting


作为一个方面说明,我觉得你的循环会更具有可读性这样:

for test, sign, number in zip(test_list, test_sign_list, test_numbers): 
    print '{}: {:<6} {:>7}'.format(test, sign, number)