Согласитесь, что предыдущие таблицы умножения выглядят не очень красиво. Давайте зададим для всех столбцов одинаковую ширину, а значения в ячейках выровним по центру.
И да, заказчик попросил ещё добавить в таблицу рамки между ячейками.
Формат ввода
В первой строке записан требуемый размер таблицы. Во второй строке — ширина столбцов.
Формат вывода:
Таблица умножения заданного размера и вида.
Пример
Ввод
3
3
Вывод
1 | 2 | 3
-----------
2 | 4 | 6
-----------
3 | 6 | 9
Ввод
5
5
Вывод
1 | 2 | 3 | 4 | 5
-----------------------------
2 | 4 | 6 | 8 | 10
-----------------------------
3 | 6 | 9 | 12 | 15
-----------------------------
4 | 8 | 12 | 16 | 20
-----------------------------
5 | 10 | 15 | 20 | 25
Решение
Эта задача ничем особо не отличается от A. Таблица умножения. Разница только в форматировании вывода и с этим как раз и возникают проблемы:
В примерах даны только квадратные матрицы и это создает ощущение, что входные данные составляют не размер таблицы и ширину ячейки, а собственно высоту и ширину таблицы, а ширина ячейки зачастую берется из прошлых задач.
В остальном из проблем – определение длины строки вывода для корректного отображения горизонтального разделителя и определения момента, когда этот разделитель не надо рисовать.
Аналогично иногда бывает не так просто определить когда рисовать вертикальный разделитель.
В обоих случаях их не надо выводить, если позиция для вывода разделителя на единицу меньше размера таблицы.
Посмотреть код
Решение
size = int(input())
ceil_width = int(input())
string_length = size * ceil_width + (size - 1)
for row in range(size):
for column in range(size):
print(f'{((row + 1) * (column + 1)): ^{ceil_width}}', end='')
if column == size - 1:
print()
else:
print('|', end='')
if row + 1 != size:
print('-' * string_length)