Улитка..

notequabl

Новичок
Пользователь
Ноя 4, 2021
3
0
1
Недавно начал изучать питон, задали вот такую задачку:
Изобразите извилистый спуск улитки по стене по заданной траектории (см.
примеры).
Формат ввода:
Вводится одна строка.
Начальный символ этой строки — символ рисования пути улитки.
Далее следует последовательность символов “<”, “>” и “V”, которые
означают движение улитки, соответственно, влево, вправо и вниз.
Гарантируется, что по любой горизонтали движение происходит только в
одну сторону (иными словами, между идущими в любом порядке “<” и “>”
всегда есть хотя бы один “V”) и что путь не пройдёт левее начального
положения.
Формат вывода:
Выводятся несколько строк, состоящих из символов рисования пути и
пробелов. Верхний левый угол соответствует начальному положению
улитки. Каждый последующий символ входной строки означает, что нужно
дорисовать символ рисования пути левее, правее или ниже предыдущего.
Пробелы используются для отступов.

Сколько ни сидел никак не могу понять, как решить. Помогите!
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 677
479
83
пример ввода и вывода посмотреть бы
 

notequabl

Новичок
Пользователь
Ноя 4, 2021
3
0
1
1636022725837.png
здесь вывод кривой во втором примере вроде, сместился почему то(пятая строчка должна еще правее начинаться и вообще все сбито дальше)
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 677
479
83
попробуйте так
Python:
s = input()
pos = 0
a = 1

for i in s[1::].replace("V", ".V.").split('.'):
    if i == "":
        continue
    if i[0] == "<":
        pos -= len(i)
        print(f"{pos * ' '}{s[0]}{i.replace('<', s[0])}")
        a = 0
    elif i[0] == ">":
        print(f"{pos * ' '}{s[0]}{i.replace('>', s[0])}")
        pos += len(i)
        a = 0
    elif i == "V":
        if a:
            print(pos * " " + s[0])
        a = 1
 
  • Мне нравится
Реакции: Student

notequabl

Новичок
Пользователь
Ноя 4, 2021
3
0
1
спасибо огромное! все работает. но можете объяснить что значит вот это:
s[1::].replace("V", ".V.").split('.'):
и это:
(f"{pos * ' '}{s[0]}{i.replace('>', s[0])}")
а то задача решена, а что решение значит не понимаю.
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 677
479
83
s[1::].replace("V", ".V.").split('.'):
здесь мы заменяем символ V на .V. и затем делаем список, разделяя элементы по точке

(f"{pos * ' '}{s[0]}{i.replace('>', s[0])}")
это форматированная строка, в фигурных скобках указаны переменные, которые подставляются в строку
 

Форум IT Специалистов