Краткий ответ: вы используете x*z
при расчете продукта, но вы используете y
в качестве "счетчика строк" и z
в качестве "счетчика столбцов", поэтому оно должно быть y*z
. Кроме того, вы должны увеличить y
после внутреннего цикла while
.
Поскольку вы используете y
в качестве "счетчика строк" и z
в качестве "счетчика столбцов", вы должны вывести y * z
в качестве ответа на это конкретное умножение. Кроме того, вы увеличиваете y
слишком быстро: вы должны увеличить его после цикла while
и сбросить z
в 1, например:
print('While Loop')
print(<b>'x'</b>, end='\t') # print a cross
x = 1
while x <= 12:
print(x ,end='\t')
x += 1
<b>y = 1</b>
while y <= 12:
print('')
print(y,<b>end='\t'</b>)
<b>z = 1</b> # reset to 1
while z <= 12:
print(<b>y*z</b> ,end='\t') # use y * z
z += 1
<b>y += 1</b> # incerement after while loop
print()
Использование for
циклов
Есть также некоторые незначительные проблемы с форматированием. Например, вы должны сначала print('X', end='\t')
, так как в противном случае столбцы не совпадают правильно.
При этом вы делаете вещи намного сложнее, чем они должны быть. Вместо этого вы можете использовать цикл for
, например:
print('x', end='\t')
print('\t'.join(str(i) for i in range(1, 13)))
for r in range(1, 13):
print(r, end='\t')
print('\t'.join(str(r*c) for c in range(1, 13)))
или в функции:
def mulgrid(n):
print('x', end='\t')
print('\t'.join(str(i) for i in range(1, n+1)))
for r in range(1, n+1):
print(r, end='\t')
print('\t'.join(str(r*c) for c in range(1, n+1)))
Например:
>>> mulgrid(1)
x 1
1 1
>>> mulgrid(2)
x 1 2
1 1 2
2 2 4
>>> mulgrid(5)
x 1 2 3 4 5
1 1 2 3 4 5
2 2 4 6 8 10
3 3 6 9 12 15
4 4 8 12 16 20
5 5 10 15 20 25
>>> mulgrid(7)
x 1 2 3 4 5 6 7
1 1 2 3 4 5 6 7
2 2 4 6 8 10 12 14
3 3 6 9 12 15 18 21
4 4 8 12 16 20 24 28
5 5 10 15 20 25 30 35
6 6 12 18 24 30 36 42
7 7 14 21 28 35 42 49