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

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

11 ответов

Решение

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

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

pindent -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 -d чтобы вставить правильный отступ на основе комментариев (подробности читайте в заголовке pindent.py), это должно позволить вам писать код на python, не беспокоясь об отступах.

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

Python поддерживает фигурные скобки для определения блоков кода, а также поддерживает использование тегов begin и end.

Пожалуйста, посмотрите эти примеры кода:

class MyClass(object): #{
    def myfunction(self, arg1, arg2): #{
        for i in range(arg1): #{ 
            print i
        #}
    #}
#}

И пример со стилем bash:

fi = endclass = enddef = endclass = done = None
class MyClass(object):
    def myfunction(self, arg1, arg2):
        for i in range(arg1): #do
            if i > 5: #then
                print i
            fi
        done
    enddef
endclass

Лучшее в этом то, что вы можете забыть поставить закрывающую скобку, и это все еще действительный python!

class MyClass(object): #{
    def myfunction(self, arg1, arg2): #{
        for i in range(arg1): #{ 
            print i
        # whoops, forgot to close that bracket!
    #}
#}

оригинальный кляп

Мой реальный совет - получить дисплей Брайля, если вы можете позволить себе одного / одного источника - слепые программисты на Python моего знакомого действительно нашли дисплей Брайля незаменимым для написания программ на Python, это делает процесс отступов намного менее болезненным. Дисплей на 40 ячеек того стоит.

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

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

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

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

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

Редактировать: Кроме того, как отметил John Millikin, есть также PyBraces, которые могут быть жизнеспособным решением для вас, и может быть возможно взломать вместе в зависимости от ваших навыков кодирования, чтобы быть именно тем, что вам нужно (и я надеюсь, что если это так, вы выпускаете его для других, как вы, чтобы использовать)

Редактировать 2: Я только что сообщил об этом в трекер ошибок Python

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

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

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

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

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

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

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

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


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

На вопрос об этом неизменно получаются такие насмешливые ответы, как "просто делай" из __ future __ импортных скобок ", " правильно настраивай свою IDE ", " все равно лучше, так что привыкни "...

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

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

Ища доступную Python IDE, нашел это и решил ответить. Под Windows с JAWS:

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

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

Удачного кодирования от другого начинающего Python).

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

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

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

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

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

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

Edsger Dijkstra использовал if ~ fi и do ~ od в своем "Охраняемом командном языке", они, кажется, происходят из Algol68. В RosettaCode.org также было несколько примеров защищенных блоков python.

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 может быть однозначно разобран и переопределен, если используются защищенные блоки, если / fi, делать / od & try / yrt вместе с точкой с запятой ";" отдельные заявления. Отлично подходит для однозначных журнальных списков или вырезки / вставки с веб-страниц.

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

Другие вопросы по тегам