2016-06-09 2 views
1

Мне нужна помощь в печати таблицы умножения с помощью вложенного цикла. Мой код прямо сейчас:Как напечатать таблицу умножения с помощью вложенных для циклов

for x in range(1,10): 
    print(" ", x, end = '') 
    print() 
for row in range(1, 10): 
    for col in range(1, 10): 
     num = row * col 
     if num < 10: 
      empty = " " 
     else: 
      if num < 100: 
       empty = " " 
     print(empty, num, end = '') 
    print() 

И выходит как

And it comes out as

мне нужно напечатать, как

I need it to print as

+0

Вы можете включить в вопрос конкретную проблему, которую вы хотите решить? –

+0

Первое, что нужно сделать, это исправить отступы кода в вашем вопросе. Кроме того, разместите код, который генерирует ваш текущий вывод - код, как показано, не работает. – mhawke

ответ

2

Одним из простейших методов было бы начало отсчета от 0 вместо 1:

for row in range(0, 10): 
    for col in range(0, 10): 
     num = row * col 
     if num < 10: 
      empty = " " 
     else: 
      if num < 100: 
       empty = " " 
     if col == 0: 
      if row == 0: 
       print(" ", end = '') 
      else: 
       print(" ", row, end='') 
     elif row == 0: 
      print(" ", col, end='') 
     else: 
      print(empty, num, end = '') 
    print() 

отпечатывается

1 2 3 4 5 6 7 8 9 
1 1 2 3 4 5 6 7 8 9 
2 2 4 6 8 10 12 14 16 18 
3 3 6 9 12 15 18 21 24 27 
4 4 8 12 16 20 24 28 32 36 
5 5 10 15 20 25 30 35 40 45 
6 6 12 18 24 30 36 42 48 54 
7 7 14 21 28 35 42 49 56 63 
8 8 16 24 32 40 48 56 64 72 
9 9 18 27 36 45 54 63 72 81 

Это, как говорится, здесь есть один вкладыш версии, что приводит к той же мощности:

print("\n".join(("{:>4}"*10).format(*(i*j if i*j else i+j if i+j else "" for j in range(10))) for i in range(10))) 
2

Try это:

header = '\t{}'.format('\t'.join(map(str, range(1, 10)))) 
rows = [] 
for i in range(1, 10): 
    row = '\t'.join(map(str, (i*q for q in range(1, 10)))) 
    rows.append('{}\t{}'.format(i, row)) 
print(header+'\n' + '\n'.join(rows)) 

Какие даст вам:

>>> print(header+'\n'+'\n'.join(rows)) 
     1  2  3  4  5  6  7  8  9 
1  1  2  3  4  5  6  7  8  9 
2  2  4  6  8  10  12  14  16  18 
3  3  6  9  12  15  18  21  24  27 
4  4  8  12  16  20  24  28  32  36 
5  5  10  15  20  25  30  35  40  45 
6  6  12  18  24  30  36  42  48  54 
7  7  14  21  28  35  42  49  56  63 
8  8  16  24  32  40  48  56  64  72 
9  9  18  27  36  45  54  63  72  81 

@Selcuk сделал несколько хороших наблюдений, так вот версия с вложенным для петель и правильного выравнивания, а также:

header = [] 
for i in range(1, 10): 
    header.append('{0:>2}'.format(i)) 

rows = [] 
for i in range(1, 10): 
    row = [] 
    for q in range(1, 10): 
    result = '{0:>2}\t'.format(i*q) 
    row.append(result) 
    rows.append(row) 

print('\t{0:>2}'.format('\t'.join(header))) 
for idx, row in enumerate(rows): 
    print('{0:>2}\t{1}'.format(idx+1, ''.join(row))) 
+0

Упрощенный для более короткого решения, но это не «использование вложенных циклов». – Selcuk

+0

На самом деле, они просто встроены и не расширены. –

+0

Да, но, очевидно, это домашнее задание/проект, и профессор хотел бы видеть явные петли. Номера также не совпадают по правому краю, как в исходном коде. – Selcuk

Смежные вопросы