Есть ли способ преобразовать отступ в коде Python в фигурные скобки?

StackOverflow https://stackoverflow.com/questions/118643

Вопрос

Я абсолютно слепой программист, который хотел бы выучить Python.К сожалению, тот факт, что блоки кода представлены с разными уровнями отступов, является основным камнем преткновения.Мне было интересно, есть ли какие-либо доступные инструменты, которые позволили бы мне писать код с использованием фигурных скобок или какого-либо другого разделителя блоков кода, а затем преобразовывать этот формат в представление с правильным отступом, которое мог бы использовать интерпретатор Python?

Это было полезно?

Решение

Есть решение вашей проблемы, которое распространяется вместе с самим python. pindent.py, он расположен в каталоге Tools \ Scripts при установке Windows (мой путь к нему C:\Python25 ools\Scripts), похоже, вам придется возьми это у svn.python.org если вы работаете под управлением Linux или OSX.

Он добавляет комментарии, когда блоки закрыты, или может правильно делать отступы в коде, если в него вставлены комментарии.Вот пример кода, выведенного pindent с помощью команды:

pindent.py -c myfile.py

def foobar(a, b):
   if a == b:
       a = a+1
   elif a < b:
       b = b-1
       if b > a: a = a-1
       # end if
   else:
       print 'oops!'
   # end if
# end def foobar

Где оригинал myfile.py был:

def foobar(a, b):
   if a == b:
       a = a+1
   elif a < b:
       b = b-1
       if b > a: a = a-1
   else:
       print 'oops!'

Вы также можете использовать pindent.py -r чтобы вставить правильный отступ на основе комментариев (подробнее читайте заголовок pindent.py), это должно позволить вам кодировать на python, не беспокоясь об отступах.

Например, запуск pindent.py -r myfile.py преобразует следующий код в myfile.py в тот же код с правильным отступом (а также с комментариями), который был создан pindent.py -c приведенный выше пример:

def foobar(a, b):
if a == b:
a = a+1
elif a < b:
b = b-1
if b > a: a = a-1
# end if
else:
print 'oops!'
# end if
# end def foobar

Мне было бы интересно узнать, какое решение вы в конечном итоге используете, если вам нужна какая-либо дополнительная помощь, пожалуйста, прокомментируйте этот пост, и я постараюсь помочь.

Другие советы

Лично я сомневаюсь, что на данный момент это так, поскольку многим поклонникам Python нравится тот факт, что Python работает таким образом, разделенный пробелами.

Однако на самом деле я никогда не думал об этом как о проблеме доступности.Может быть, это что-то, что можно отправить в качестве отчета об ошибке в Python?

Я бы предположил, что вы используете программу чтения с экрана здесь, однако, для вывода?Значит, вкладки будут казаться вам "невидимыми"?С выводом шрифтом Брайля это, возможно, было бы легче читать, но я точно понимаю, насколько запутанным это может быть.

На самом деле, мне это очень интересно.Я хотел бы знать достаточно, чтобы написать приложение, которое сделает это за вас.

Я думаю, что это определенно то, для чего я добавлю отчет об ошибке, если только вы еще не сделали этого сами или не хотите.

Редактировать:Кроме того, поскольку отмеченный Автор: Джон Милликин Существует также Пибрасы Который может быть жизнеспособным решением для вас, и, возможно, его можно взломать вместе, в зависимости от ваших навыков кодирования, чтобы быть именно тем, что вам нужно (и я надеюсь, что если это так, вы предоставите его для использования другим, таким как вы)

Правка 2:Я только что сообщил об этом к программе отслеживания ошибок python

Хотя я не слепой, я слышал много хорошего о Изможденный язык.У них был режим Python с момента их создания. выпуск 8.0 в 1998 году (кажется, они готовятся к выпуску 28.0!).Определенно стоит проверить.

Вы должны иметь возможность настроить свой редактор на использование табуляций и пробелов - я знаю, что это возможно дисплей пробелы в большинстве редакторов, поэтому где-то должна быть опция доступности, позволяющая их использовать.

В противном случае существует пибрасы, который был написан как розыгрыш, но на самом деле может быть полезен вам при небольшой работе.

Если вы используете Windows, я настоятельно рекомендую вам ознакомиться с EdSharp из:http://empowermentzone.com/EdSharp.htm Он поддерживает все ведущие программы чтения с экрана Windows, его можно настроить для озвучивания уровней отступов в коде, или у него есть встроенная утилита под названием PyBrace, которая может преобразовывать синтаксис в фигурные скобки и из них, если вы хотите сделать это вместо этого, и он поддерживает все виды других функций, которые программисты привыкли ожидать от наших текстовых редакторов.Я использую его в течение многих лет, для всего, от PHP до JavaScript, от HTML до Python, и мне это нравится.

Я ценю вашу проблему, но думаю, что вы указываете реализацию, а не проблему, которую вам нужно решить.Вместо преобразования в фигурные скобки, как насчет того, чтобы поработать над тем, чтобы программа чтения с экрана указывала вам уровень отступа?

Например, некоторые люди работал над раскраской синтаксиса vim для представления уровней отступов python.Возможно, измененная раскраска синтаксиса могла бы создать что-то, что прочитала бы ваша программа чтения с экрана?

Все эти ответы типа "нет, ты не можешь" действительно раздражают.Конечно, ты можешь.

Это взлом, но вы можете это сделать.

http://timhatch.com/projects/pybraces/

использует пользовательскую кодировку для преобразования фигурных скобок в блоки с отступом перед передачей их интерпретатору.


В стороне и как кто-то новичок в python - я не принимаю рассуждения, стоящие за даже позволяя фигурные скобки / общие разделители блоков ...помимо того, что это предпочтение разработчиков python.Фигурные скобки, по крайней мере, не будут случайно съедены, если вы выполняете какую-то автоматическую обработку своего кода или работаете в редакторе, который не понимает, насколько важны пробелы.Если вы генерируете код автоматически, удобно не отслеживать уровни отступов.Если вы хотите использовать python для создания однострочной версии в стиле perl, вы автоматически становитесь калекой.Хотя бы для того, чтобы подстраховаться.Что делать, если ваша 1000-строчная программа на python съест все свои вкладки?Вы собираетесь перейти от строки к строке и выяснить, где должен быть отступ?

Спрашивая об этом, вы неизменно получите насмешливый ответ типа "просто сделайте 'from __ future __ import фигурные скобки'", "правильно настройте свою IDE", "в любом случае так лучше, так что привыкайте к этому"...

Я понимаю их точку зрения, но, эй, если бы я захотел, я мог бы поставить точку с запятой после каждой отдельной строки.Так что я не понимаю, почему все так непреклонны в отношении брекетов.Если вам нужно, чтобы ваш язык заставлял вас делать правильные отступы, то, во-первых, вы делаете это неправильно.

Только мой 2c - я все равно собираюсь использовать брекеты.

Поискав доступную среду разработки Python, нашел это и решил ответить.Под окнами с ЧЕЛЮСТЯМИ:

  1. Перейдите в Центр настроек, нажав Челюстной+6 (в числовом ряду над буквами) в вашем любимом текстовом редакторе.Если JAWS предложит создать новый файл конфигурации, согласитесь.
  2. В поле поиска введите "отступ".
  3. Результат будет только один:"Произнесите символы отступа".Включи это.
  4. Наслаждайтесь!

Единственное, что нас расстраивает, это то, что мы не можем наслаждаться примерами кода на веб-сайтах (поскольку использование отступов в браузерах не слишком удобно — это порождает лишнюю речь).

Счастливого кодирования от другого новичка в Python).

Я использую eclipse с расширениями pydev, поскольку это IDE, с которой у меня большой опыт.Я также ценю разумные отступы, которые он предлагает для кодирования операторов if, циклов и т.д.Я настроил pindent.py скрипт как внешний инструмент, который я могу запускать в текущем модуле python, что упрощает мою жизнь, поэтому я могу видеть, что где закрыто, без необходимости постоянно проверять отступы.

Существуют различные ответы, объясняющие, как это сделать.Но я бы рекомендовал не пользоваться этим маршрутом.Хотя вы могли бы использовать скрипт для выполнения преобразования, это затруднило бы работу над командным проектом.

Моя рекомендация состояла бы в том, чтобы настроить программу чтения с экрана на объявление вкладок.Это не так раздражает, как кажется, поскольку в нем будет написано только "отступ 5", а не "вкладка tab tab tab tab tab".Кроме того, отступ будет считываться только при его изменении, так что вы можете просмотреть весь блок кода, не услышав уровень отступа.Таким образом, использование отступа не более подробно, чем использование фигурных скобок.

Поскольку я не знаю, какую операционную систему или программу чтения с экрана вы используете, я, к сожалению, не могу указать точные шаги для достижения этой цели.

Эдсгер Дейкстра использованный если ~ fi и делать ~ од на его "Осторожном командном языке" они, по-видимому, происходят из Алгол68.Были также некоторые примеры блоков, защищенных python, используемых в RosettaCode.org.

fi = od = yrt = end = lambda object: None;
class MyClass(object):
    def myfunction(self, arg1, arg2):
        for i in range(arg1) :# do
            if i > 5 :# then
                print i
            fi
        od # or end(i) #
    end(myfunction)
end(MyClass)

Искаженный пробелами код python может быть однозначно распутан и переиндентирован, если использовать защищенные блоки if/fi, do/od и try/yrt вместе с точками с запятой ";" для разделения операторов.Отлично подходит для недвусмысленных объявлений в журналах или вырезания / вставки с веб-страниц.

Написать короткую программу на Python для вставки / удаления защитных блоков и точек с запятой должно быть достаточно просто.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top