我是一个完全盲的程序员,想学习Python。不幸的是,代码块以不同的缩进级别表示的事实是一个主要的绊脚石。我想知道是否有可用的工具允许我使用花括号或其他代码块定界符编写代码,然后将该格式转换为Python解释程序可以使用的适当缩进表示形式?
我是一个完全盲的程序员,想学习Python。不幸的是,代码块以不同的缩进级别表示的事实是一个主要的绊脚石。我想知道是否有可用的工具允许我使用花括号或其他代码块定界符编写代码,然后将该格式转换为Python解释程序可以使用的适当缩进表示形式?
Answers:
有一个针对您的问题的解决方案,该解决方案随python一起分发。pindent.py
,它位于Windows安装目录下的Tools \ Scripts目录中(我的路径是C:\ Python25 \ Tools \ Scripts),如果您要在svn.python.org上运行,则它似乎必须从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
我很想了解您最终使用的解决方案,如果您需要任何进一步的帮助,请对此帖子发表评论,我会尽力提供帮助。
pindent
左对齐代码相反的代码的工具(许多盲程序员首选的缩进方案)可能很有用。会更有用from __future__ import braces
-但不能用作复活节彩蛋。
pindent.py -c
; 是pindent.py -r
。瑞安(Ryan)已经在回答中指出了这一点,但是我只是对其进行了编辑,以添加一个明确的示例,并且更容易遗漏。(此外,我更正了命令行选项,以实现此目的:它是-r
,不-d
只是删除注释。)
我个人怀疑当前是否存在这种情况,因为许多Python爱好者都喜欢Python是这种方式,用空格分隔。
但是,我从未真正将其视为可访问性问题。也许是要向Python提交错误报告吗?
我假设您在这里使用屏幕阅读器作为输出?因此,选项卡在您看来似乎“看不见”?使用盲文输出,可能更易于阅读,但我可以确切地理解这会造成多大的混乱。
实际上,这对我来说很有趣。我希望我有足够的知识能够编写一个可以为您完成此操作的应用程序。
我认为这绝对是我将要提交给错误报告的内容,除非您自己或愿意这样做。
编辑:另外,正如约翰·米利金(John Millikin)所指出的那样,还有PyBraces可能对您来说是可行的解决方案,并且可能会完全取决于您的编码技能而被黑客入侵,而这正是您所需要的(我希望是这样) ,您可以将其发布给其他人,例如您自己使用)
编辑2:我刚刚将此报告给python bug跟踪器
尽管我不是盲人,但我听说过有关Emacspeak的好消息。自1998年8.0发行以来,他们就拥有Python模式(它们似乎要发行28.0了!)。绝对值得一试。
如果您使用的是Windows,强烈建议您访问以下网址查看EdSharp:http ://empowermentzone.com/EdSharp.htm 它支持所有领先的Windows屏幕阅读器,可以将其配置为讲代码的缩进级别,或者它具有一个称为PyBrace的内置实用程序,可以代替大括号语法进行转换,并且还支持程序员在我们的文本编辑器中期望的所有其他功能。我使用它已经有很多年了,从PHP到JavaScript到HTML到Python,我都喜欢它。
所有这些“不行”的答案确实很烦人。当然可以。
这是一个hack,但是您可以做到。
http://timhatch.com/projects/pybraces/
使用自定义编码将花括号转换为缩进的块,然后再将其传递给解释器。
顺便说一句,作为python的新手,我不接受甚至不允许使用花括号/通用块定界符的背后原因……除了那是python开发人员的偏好之外。如果您正在对代码进行一些自动处理或在不了解空格很重要的编辑器中工作,则括号至少不会被误吃。如果您是自动生成代码,则不必跟踪缩进级别。如果您想使用python进行perl风格的单线处理,则会自动瘫痪。如果没有别的,只是作为保障。如果您的1000行python程序将其所有选项卡都吃掉了怎么办?您将逐行查找缩进应该在哪里?
询问此问题总是会得到诸如“只要'从__将来的__导入括号''做','正确配置您的IDE”,“无论如何都更好,因此请习惯一下”这样的嘲讽式回答。
我明白他们的意思,但是,嘿,如果我愿意,我可以在每行之后加上一个分号。所以我不明白为什么每个人都对牙套如此坚持。如果您需要使用语言来迫使您正确缩进,那么您并不是一开始就这样做。
只是我的2c-无论如何,我都会用牙套。
Edsger Dijkstra算法中使用,如果〜音响和做〜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)
如果一个人使用受保护的块if / fi,do / od和try / yrt以及分号“;”一起使用,则空格混乱的python代码可以毫无歧义地重新插入并重新缩进。分开陈述。非常适合用于明确的杂志列表或从网页剪切/粘贴。
编写一个简短的python程序来插入/删除防护块和分号应该足够容易。