Рисуем диагонали квадрата в Python

Задача следующая - напишите программу, которая запрашивает у пользователя сторону квадрата и символ, а затем рисует этот символ по диагоналям квадрата. Гарантируется, что входное число всегда нечетное.

s = int(input('vv chislo: '))
char = str(input('vv simbol: '))
if s % 2 == 1:
    for i in range(1, s, 2):
        i = ' ' * (i-2) + char + ' ' * (s - (i + 1)) + char + ' ' * (i - 2)
        print(i)
    for i in range(s, 0, -2):
        i = ' ' * (i-2) + char + ' ' * (s - (i + 1)) + char + ' ' * (i - 2)
        print(i)

Помогите пожалуйста разобраться с проблемой вывода. В середине выводит 2 символа и с неправильными отступами.


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

Автор решения: mrEvgenX

Я могу предложить чуть попроще:

  • Хранить список из пробелов (допустимы ли такие накладные расходы?)
  • На каждой строчке выставлять символ на нужной диагональной позиции
  • Печатать получившуюся строку
  • А затем сбрасывать обратно в пробел.
    s = int(input('vv chislo: '))
    char = str(input('vv simbol: '))
    if s % 2 == 1:
        current_line = [' '] * s
        for i in range(0, s):
            current_line[i] = char
            current_line[s-1 - i] = char
            print(''.join(current_line))
            current_line[i] = ' '
            current_line[s-1 - i] = ' '

Получается один цикл, довольно прозрачно работает.

Надеюсь, подойдет.

→ Ссылка
Автор решения: user435200
n = int(input('Введите число: '))
s = str(input('Введите символ: '))
for i in range(1, n+1, 2):
    if i != n:  
        print(' ' * (i//2) + s + ' ' * (n - (i + 1)) + s + ' ' * (i//2))
    else:
        print(" "* (n//2) + s + " "* (n//2))
for i in range(n-2, 0, -2):
    print(' ' * (i // 2) + s + ' ' * (n - (i + 1)) + s + ' ' * (i // 2))
→ Ссылка