Итак, если я понял, вы берете все, что вводит пользователь, делаете отступ и добавляете к остальной части вашей программы (а затем запускаете всю программу) .
Итак, после того, как вы поместите пользовательский ввод в свою программу, вы можете запустить регулярное выражение, которое в основном возвращает этот принудительный отступ. Примерно так: в трех кавычках заменить все «маркеры новой строки»
Единственный способ, который я вижу, - это убрать первые n табуляций для каждой строки, начинающейся со второй, где n - известный идентификатор основного метода.
Если эта идентификация заранее не известна - вы можете добавить завершающую новую строку перед ее вставкой и удалить количество табуляций из последней строки ...
Третье решение - проанализировать данные и найти начало многострочной кавычки, а не добавляйте свой идентификатор в каждую строку после того, как она будет закрыта.
Думаю, есть лучшее решение ..
textwrap.dedent from the standard library is there to automatically undo the wacky indentation.
То, что следует за первой строкой многострочной строки, является частью строки и не рассматривается анализатором как отступ. Вы можете свободно писать:
def main():
"""foo
bar
foo2"""
pass
, и он будет поступать правильно.
С другой стороны, это не читается, и Python это знает. Поэтому, если строка документации содержит пробелы в своей второй строке, это количество пробелов удаляется, когда вы используете help ()
для просмотра строки документации. Таким образом, help (main)
и приведенная ниже help (main2)
создают одинаковую справочную информацию.
def main2():
"""foo
bar
foo2"""
pass