Помощь в улучшении кода

Есть задача: Напишите консольную программу, которая выведет в консоль специальный символ “∑”, высота которой вводится с клавиатуры. Пример вывода для высоты 5 представлен ниже:

Есть моё решение:

h = int(input('Введите высоту фигуры: '))
a = ' '
y = int(h // 2)

if h % 2 == 0:
    print('Z' * y)
    for i in range(0, y-1):
        print('', 'Z', sep=a * i)
    print('', 'Z', sep=a*(y - 2))
    for i in range(0, y-2):
        print('', 'Z', sep=a * (y - i - 3))
    print('Z' * y)
else:
    print('Z' * abs((y + 1)))
    for i in range(0, y):
        print('', 'Z', sep=a * i)
    for i in range(0, y-1):
        print('', 'Z', sep=a * (y - i - 2))
    print('Z' * abs((y + 1)))

Все работает. Однако есть сомнение в том, что моё решение максимально эффективное. Обращаюсь за помощью в улучшении.


Ответы (1 шт):

Автор решения: Сергей

Можно сделать короче в 2 раза- 9 строк вместо 18. Изменения:

  1. int не нужен в y.
  2. a только сбивает, пробел прямо в коде - нагляднее.
  3. Ушли от двух повторяющихся кусков кода.
  4. Используем тернарный оператор, чтобу уменьшить число строк.
  5. Убрали sep, как @insolor советовал.
  6. Не нужен abs.
h = int(input('Введите высоту фигуры: '))
y = h // 2

print ('Z' * abs((y + 1)) if h % 2 else 'Z' * y)
for i in range(0, y - 1):
    print(' ' * i + 'Z')
print (' ' * (y-1) + 'Z' if h % 2 else ' ' * (y - 2) + 'Z')
for i in range(0, y - 2):
    print(' ' * (y - i - 3 + h % 2) + 'Z')
print(-2 * ' ' + 'Z' + '\n' + 'Z' * (y + 1) if h % 2 else 'Z' * y )
→ Ссылка