83

私は全盲のプログラマーで、Python を学びたいと思っています。残念ながら、コード ブロックがさまざまなレベルのインデントで表されているという事実は、大きな障害となっています。中かっこやその他のコード ブロック区切り文字を使用してコードを記述し、その形式を Python インタープリターが使用できる適切にインデントされた表現に変換できるツールがあるかどうか疑問に思っていました。

4

11 に答える 11

57

Python自体で配布されている問題の解決策があります。pindent.py、WindowsインストールのTools\Scriptsディレクトリにあります(私のパスはC:\ Python25\Tools\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.pypindent.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

さらにサポートが必要な場合は、この投稿にコメントしてください。私がお手伝いします.

于 2008-09-23T02:04:01.760 に答える
11

多くの Python 愛好家は、Python がこのように空白で区切られているという事実を気に入っているため、個人的には現時点で存在するとは考えていません。

ただし、それをアクセシビリティの問題として実際に考えたことはありません。多分それはPythonへのバグレポートとして提出するものですか?

ただし、ここでは出力にスクリーンリーダーを使用していると思いますか? タブが「見えない」ように見えますか? 点字出力があれば読みやすいかもしれませんが、これがどれほど混乱を招く可能性があるかは正確に理解できます。

実際、これは私にとって非常に興味深いことです。あなたのためにこれを行うアプリを書くことができるのに十分な知識があればいいのにと思います。

あなたがすでに自分でそうしている、またはしたいのでない限り、それは間違いなくバグレポートに入れるものだと思います。

編集: また、John Millikinが指摘したように、 PyBracesもあります。これは実行可能な解決策であり、コーディング スキルに応じて一緒にハッキングして、まさに必要なものになる可能性があります (その場合はそうであることを願っています)。 、あなたのような他の人が使用できるように解放します)

編集2:これをpythonバグトラッカーに報告しました

于 2008-09-23T01:35:23.517 に答える
9

私は盲目ではありませんが、Emacspeakについて良いことを聞いたことがあります。1998年の8.0リリース以来Pythonモードを使用しています(リリース28.0までのようです!)。間違いなくチェックする価値があります。

于 2008-09-23T01:51:53.303 に答える
6

Windows を使用している場合は、次の URL からEdSharpを参照することを強くお勧めします 。または、PyBrace と呼ばれるユーティリティが組み込まれており、必要に応じて中かっこの構文に変換したり、中かっこの構文から変換したりできます。また、プログラマーがテキスト エディターに期待するようになった他のすべての機能をサポートしています。PHP から JavaScript、HTML、Python に至るまで、何年も使用してきましたが、とても気に入っています。

于 2012-11-08T15:40:12.840 に答える
6

タブとスペースを話すようにエディターを構成できるはずです-ほとんどのエディターで空白を表示できることを知っているので、それらを話すためのアクセシビリティオプションがどこかにある必要があります.

それができない場合は、悪ふざけとして書かれたpybracesがありますが、少し作業すれば実際に役立つ可能性があります。

于 2008-09-23T01:38:10.683 に答える
5

これらの「できない」タイプの回答はすべて、本当に迷惑です。もちろんできます。

ハックですが、できます。

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

カスタムエンコーディングを使用して、中かっこをインデントされたブロックに変換してから、インタープリターに渡します。


余談ですが、Python を初めて使用する人として、中かっこ/一般的なブロック区切り文字を許可しないことの背後にある理由を受け入れません...それが Python 開発者の好みであることを除けば。コードの自動処理を行っている場合、または空白が重要であることを理解していないエディターで作業している場合、少なくとも中括弧が誤って食べられることはありません。コードを自動的に生成している場合、インデント レベルを追跡する必要がないのは便利です。Python を使用して perl 風のワンライナーを実行したい場合は、自動的に不自由になります。他に何もない場合は、保護手段として。1000 行の Python プログラムがすべてのタブを食べてしまったらどうしますか? 行ごとに移動して、インデントがどこにあるべきかを把握しますか?

それについて尋ねると、「'from __ future __ import Braces' を実行してください」、「IDE を正しく構成してください」、「とにかくそのほうがいいので慣れてください」などの皮肉な反応が返ってきます。

私は彼らの主張を理解していますが、私が望むなら、すべての行の後にセミコロンを置くことができます. ですから、なぜ誰もがブレースのことについてそんなに固執しているのか理解できません. 言語で適切にインデントを強制する必要がある場合は、そもそも正しくインデントしていません。

ちょうど私の 2c - とにかくブレースを使用します。

于 2012-07-08T09:42:09.123 に答える
4

問題はありがたいですが、解決する必要のある問題ではなく、実装を指定していると思います。中かっこに変換する代わりに、スクリーンリーダーがインデントレベルを通知する方法に取り組んでみませんか?

たとえば、Pythonのインデントレベルを表すためにvim構文の色付けに取り組んだ人もいます。おそらく、構文の色を変更すると、スクリーンリーダーが読み取るものが生成される可能性がありますか?

于 2008-09-23T01:43:21.843 に答える
4

アクセス可能な Python IDE を検索すると、これが見つかり、回答することにしました。Windows で JAWS を使用する場合:

  1. お気に入りのテキスト エディターでJawsKey+ (文字の上の数字行)を押して、設定センターに移動します。6JAWS で新しい構成ファイルを作成するように求められたら、同意します。
  2. 検索フィールドに「インデント」と入力します
  3. 「Say indent characters」という 1 つの結果しかありません。これをオンにします。
  4. 楽しみ!

私たちにとってイライラする唯一のことは、Web サイトでコード例を楽しむことができないことです (ブラウザーでインデントで話すのはあまり快適ではないため、不要な音声が生成されます)。

別の Python 初心者からの幸せなコーディング)。

于 2012-08-16T23:34:46.350 に答える
3

Eclipse は私が経験豊富な IDE であるため、pydev 拡張機能で Eclipse を使用します。また、if ステートメントやループなどのコーディングに提供されるスマートなインデントにも感謝しています。 pindent.py スクリプトを外部ツールとして構成し、現在焦点を合わせている python モジュールで実行できるようにしました。インデントを常にチェックする必要なく、どこでも閉じられます。

于 2008-10-25T20:06:08.097 に答える
1

Edsger Dijkstraは、彼の「Guarded CommandLanguage」で〜fido〜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コードを明確にマングル解除して再インデントできます。ステートメントを分離します。明確な雑誌のリストやWebページからの切り取り/貼り付けに最適です。

ガードブロックとセミコロンを挿入/削除する短いPythonプログラムを作成するのは簡単なはずです。

于 2009-09-25T22:36:33.670 に答える
1

これを行う方法を説明するさまざまな答えがあります。しかし、私はこのルートをとらないことをお勧めします。スクリプトを使用して変換を行うことはできますが、チームプロジェクトでの作業が難しくなります。

タブをアナウンスするようにスクリーンリーダーを構成することをお勧めします。「タブタブタブタブタブ」ではなく「インデント5」としか表示されないため、これは思ったほど煩わしいことではありません。さらに、インデントは変更されたときにのみ読み取られるため、インデントレベルを聞くことなく、コードのブロック全体を調べることができます。このように、インデントを聞くことは、中かっこを聞くことよりも冗長ではありません。

使用しているオペレーティングシステムまたはスクリーンリーダーがわからないため、残念ながら、これを実現するための正確な手順を説明することはできません。

于 2009-01-17T18:49:29.283 に答える