2013-04-19 93 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)