2014-11-04 2 views
0

У меня возникают проблемы с вложенными циклами и списками. Мне нужно напечатать таблицу умножения на 2 измерения.Вложенная петля, печать 2-мерная вложенная петля

mult_table = [ 
[1, 2, 3], 
[2, 4, 6], 
[3, 6, 9] 
] 

print mult_table[0][0],mult_table[0][1],mult_table[0][2] 
print mult_table[1][0],mult_table[1][1],mult_table[1][2] 
print mult_table[2][0],mult_table[2][1],mult_table[2][2] 

1 2 3 
2 4 6 
3 6 9 

это то, что я получаю, но книга хочет этот выход

1 | 2 | 3 
2 | 4 | 6 
3 | 6 | 9 

им не на 100% уверен, как это сделать, я знаю, что нужно использовать цикл, но как я положил вертикальные черточки в?

ответ

1

Использование join присоединиться к последовательности строк с текстом между ними:

mult_table = [ 
[1, 2, 3], 
[2, 4, 6], 
[3, 6, 9] 
] 

for row in mult_table: 
    print ' | '.join(str(x) for x in row) 

Выход:

1 | 2 | 3 
2 | 4 | 6 
3 | 6 | 9 

Это потеряет свою красивость, если один из элементов шире один символ, однако. Если вы знаете максимальную ширину, вы можете настроить его, чтобы выглядеть следующим образом:

mult_table = [ 
[1, 2, 3], 
[2, 4, 6], 
[3, 666, 9], 
] 

for row in mult_table: 
    print ' | '.join('{0:<4}'.format(x) for x in row) 

Выход:

1 | 2 | 3 
2 | 4 | 6 
3 | 666 | 9 

Чтобы быть действительно гибким, мы можем вычислить максимальную ширину любого элемента массив, и используйте это как нашу ширину. str.rjust() будет правым выравнивать строку до определенной ширины.

mult_table = [ 
[1, 2, 3], 
[2, 4, 6], 
[3, 66666, 9], 
] 

maxval = max(max(mult_table)) 
maxwid = len(str(maxval)) 

for row in mult_table: 
    print ' | '.join(str(x).rjust(maxwid) for x in row) 

Выход:

1 |  2 |  3 
    2 |  4 |  6 
    3 | 66666 |  9 
Смежные вопросы