Есть ли способ преобразовать отступ в коде Python в фигурные скобки?
Я полностью слепой программист, который хотел бы изучить Python. К сожалению, тот факт, что блоки кода представлены с различными уровнями отступа является основным камнем преткновения. Мне было интересно, есть ли какие-либо доступные инструменты, которые позволили бы мне писать код с помощью фигурных скобок или какого-либо другого разделителя блоков кода, а затем конвертировать этот формат в правильное отступовое представление, которое может использовать интерпретатор Python?
12 ответов:
есть решение вашей проблемы, которое распространяется с самим python.
pindent.py, он находится в каталоге Tools\Scripts в установке windows (мой путь к нему C:\Python25\Tools\Scripts), похоже, вам придется схватить его svn.python.org если вы работаете на Linux или OSX.он добавляет комментарии, когда блоки закрыты, или может правильно отступать код, если комментарии вставляются. Вот пример кода, выведенного pindent с помощью команда:
pindent -c myfile.pydef 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! #} #}мой настоящий совет-получить дисплей Брайля, если вы можете себе это позволить one / source one-слепые программисты python моего знакомого действительно нашли дисплей Брайля, необходимый для написания программ python, это делает отступ гораздо менее болезненным. Дисплей с 40 ячейками стоит того.
Я лично сомневаюсь, что в настоящее время на данный момент, как много питона afficionados нравится тот факт, что Python таким образом, разделена пробелами.
Я никогда не думал об этом однако проблема доступности. Может быть, это что-то выдвинуть в качестве отчета об ошибке для Python?
Я бы предположил, что вы используете экранный ридер здесь, однако, для вывода? Таким образом, вкладки будут казаться вам "невидимыми"? С выводом Брайля, это может быть легче читать, но я могу точно понять, насколько запутанным это может быть.
на самом деле, это очень интересно для меня. Я желаю, чтобы я знал достаточно, чтобы быть в состоянии написать приложение, которое будет делать это за вас.
Я думаю, что это определенно то, что я помещу в отчет об ошибке, если вы уже не сделали этого сами или не хотите.
редактировать: также, как отметить by Джон Милликин есть еще PyBraces который может быть жизнеспособным решение для вас, и может быть возможно быть взломан вместе в зависимости от ваших навыков кодирования, чтобы быть именно то, что вам нужно (и я надеюсь, что если это так, вы выпускаете его для других, как вы использовать)
Edit 2: я только что об этом в python bug tracker
хотя я не слепой, я слышал хорошие вещи о Emacspeak. У них был режим Python с момента их версия 8.0 в 1998 году (они, кажется, до версии 28.0!). Определенно стоит проверить.
вы должны быть в состоянии настроить свой редактор, чтобы говорить табуляции и пробелов-я знаю, что это возможно display пробелы в большинстве редакторов, так что должен быть вариант доступности где-то говорить их.
Не есть pybraces, который был написан как розыгрыш, но на самом деле может быть полезен для вас с немного работы.
Если вы находитесь на Windows, я настоятельно рекомендую вам взглянуть на EdSharp от: http://empowermentzone.com/EdSharp.htm Он поддерживает все ведущие Windows screenreaders, он может быть настроен, чтобы говорить уровни отступов кода, или он имеет встроенную утилиту под названием PyBrace, которая может конвертировать в и из синтаксиса фигурных скобок, если вы хотите сделать это вместо этого, и он поддерживает все виды других функций, которые программисты ожидали в наших текстовых редакторах. Я использую его для годы, для всего от PHP до JavaScript до HTML до Python, и мне это нравится.
Я ценю вашу проблему, но думаю, что вы указываете реализацию вместо проблемы, которую вам нужно решить. Вместо преобразования в фигурные скобки, как насчет работы над способом для вашего чтения с экрана, чтобы сказать вам уровень отступа?
Например, некоторые люди работали над раскраской синтаксиса vim для представления уровней отступа python. Возможно, модифицированная синтаксическая раскраска может создать что-то, что ваш читатель экрана будет читать?
все эти типы ответов" нет, вы не можете " действительно раздражают. Конечно, можно.
Это хак, но вы можете сделать это.
http://timhatch.com/projects/pybraces/
использует пользовательскую кодировку для преобразования фигурных скобок в блоки с отступами перед передачей их интерпретатору.
в стороне, и как кто - то новый для python-я не принимаю рассуждения позади даже не позволяет скобки/общий блок ограничители. .. кроме того, это предпочтение разработчиков python. Фигурные скобки, по крайней мере, не будут съедены случайно, если вы выполняете некоторую автоматическую обработку своего кода или работаете в редакторе, который не понимает, что пробел важен. Если вы генерируете код автоматически, удобно не отслеживать уровни отступов. Если вы хотите использовать python для выполнения однострочного Perl-esque, вы автоматически калечитесь. По крайней мере, в качестве гарантии. Что делать, если ваша 1000 линия программа python получает все свои вкладки съедены? Вы собираетесь идти линия за линией и выяснить, где отступ должен быть?
спрашивая об этом, вы неизменно получите ответ с языком в щеку, например: "просто сделайте" из __ future __ import braces"," правильно настройте свою IDE"," в любом случае лучше привыкнуть к этому"...
Я понимаю их точку зрения, но эй, если бы я хотел, я мог бы поставить точку с запятой после каждой строки. Поэтому я не понимаю, почему все так категоричны по поводу брекеты вещь. Если вам нужен ваш язык, чтобы заставить вас правильно абзац, Вы не делаете это правильно в первую очередь.
только мой 2c-я все равно буду использовать фигурные скобки.
Я использую eclipse с расширениями pydev, так как это IDE, с которой у меня много опыта. Я также ценю умный отступ, который он предлагает для кодирования операторов if, циклов и т. д. Я настроил pindent.py скрипт как внешний инструмент, который я могу запустить на текущем модуле python, который упрощает мою жизнь, поэтому я могу видеть, что закрыто, где без необходимости постоянно проверять отступ.
Поиск доступной Python IDE, нашел это и решил ответить. Под окнами с челюстями:
- перейдите в центр настроек, нажав JawsKey+6 (в числовой строке над буквами) в вашем любимом текстовом редакторе. Если JAWS предложит создать новый файл конфигурации, согласитесь.
- в поле поиска введите "отступ"
- будет только один результат:"Сказать отступ символов". Поверните это на.
- наслаждайтесь!
единственное, что нас расстраивает, это то, что мы не можем наслаждаться примерами кода на веб - сайтах (поскольку отступы в браузерах не слишком удобны-он генерирует лишнюю речь).
счастливое кодирование от другого новичка Python).
существуют различные ответы, объясняющие, как это сделать. Но я бы рекомендовал не брать этот маршрут. Хотя вы можете использовать сценарий для преобразования, это затруднит работу над командным проектом.
моя рекомендация состояла бы в том, чтобы настроить ваш экран для чтения, чтобы объявить вкладки. Это не так раздражает, как кажется, так как он будет говорить только "отступ 5", а не "tab tab tab tab tab". Кроме того, отступ будет считываться только при его изменении, поэтому вы можете пойти через весь блок кода, не слыша уровень отступа. Таким образом, слушание отступа не более многословно, чем слушание скобок.
поскольку я не знаю, какую операционную систему или программу чтения с экрана вы используете, я, к сожалению, не могу дать точные шаги для достижения этой цели.
Edsger Dijkstra использовать если ~ fi и do ~ od в его "охраняемом командном языке" они, кажется, происходят от Algol68. Были также некоторые примеры охраняемых блоков 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 для вставки/удаления защитных блоков и точек с запятой.
Comments