P. Редизайн таблицы умножения

Согласитесь, что предыдущие таблицы умножения выглядят не очень красиво. Давайте зададим для всех столбцов одинаковую ширину, а значения в ячейках выровним по центру.
И да, заказчик попросил ещё добавить в таблицу рамки между ячейками.

Формат ввода

В первой строке записан требуемый размер таблицы. Во второй строке — ширина столбцов.

Формат вывода:

Таблица умножения заданного размера и вида.

Пример

Ввод

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. Таблица умножения. Разница только в форматировании вывода и с этим как раз и возникают проблемы:

В примерах даны только квадратные матрицы и это создает ощущение, что входные данные составляют не размер таблицы и ширину ячейки, а собственно высоту и ширину таблицы, а ширина ячейки зачастую берется из прошлых задач.

В остальном из проблем – определение длины строки вывода для корректного отображения горизонтального разделителя и определения момента, когда этот разделитель не надо рисовать.
Аналогично иногда бывает не так просто определить когда рисовать вертикальный разделитель.
В обоих случаях их не надо выводить, если позиция для вывода разделителя на единицу меньше размера таблицы.

Посмотреть код

Решение

Python
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)
Подписаться
Уведомить о
guest
2 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии