Вывод строки по периметру квадрата
Пока набросал код, который делает лишь половину работы, а именно имя пишется вправо и вниз:
name = str(input("Введите имя, которое хотите получить квадратиком "))
print(name)
for letter in name:
if letter > name[0]:
print(letter)
Я не могу понять, как реверсивно написать имя с отступами (получается от длины слова нужно отнять 2 (первая и последняя буква) это будет строчка квадрата которая идёт вниз с другой стороны) и как реверсивно написать нижнюю строчку квадрата, при этом не делая в коде отступ на новую строчку(иначе квадрата, разумеется, не будет)
В а с я
а с
с а
я с а В
Ответы (3 шт):
Вот как то так)
def square_print(name):
back_name = name[::-1]
print(*name)
for i in range(len(name[1:]) - 1):
print(name[1:][i], ((len(name) * 2) - 5) * " ", back_name[1:][i])
print(*back_name)
square_print('Trofimov')
я думаю принцип понятен, только нужно поработать с дополнительными пробелами.
def square_print(s):
print(*s)
_cut = s[1:-1]
for direct, reverse in zip(_cut, reversed(_cut)):
print(f'{direct}{reverse:>{len(s) * 2 - 2}}')
print(*reversed(s))
s = "AnyString"
square_print(s)
Краткое пояснение:
Первая строка выводится не как объект строки, а как коллекция, поэтому, по-умолчанию, добавляется пробел-разделитель.
Дальше создается копия-подстрока, содержащая исходную без первого и последнего символа. По этой подстроке проходим прямым и обратным итератором. При печати содержимого обратного итератора форматируем ширину поля на величину длины исходной строки умноженной на 2 (т.к. для каждого исходного символа добавили пробел), и минус 2 символа (первый и последний).
Последняя строка выводится аналогично первой, но в инверсном порядке.
Вот вам в копилку с использованием numpy:
import numpy as np
def sqrPrint(a: str):
arr = np.full([len(a), len(a)], " ")
for i in (arr, np.rot90(arr,2)):
i[0,:], i.T[0] = list(a), list(a)
[print(' '.join(x)) for x in arr]
sqrPrint("Абырвалг")
Ну и результат:
А б ы р в а л г
б л
ы а
р в
в р
а ы
л б
г л а в р ы б А