web-dev-qa-db-ja.com

Pythonコードのインデントを中括弧に変換する方法はありますか?

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

81
Jared

python自体で配布される問題の解決策があります。pindent.py、それはWindowsインストールのTools\Scriptsディレクトリにあります(私のパスはC:\ Python25です)\Tools\Scripts)、LinuxまたはOSXで実行している場合は、 svn.python.orgから取得 する必要があるようです。

ブロックが閉じているときにコメントを追加するか、コメントを入力するとコードを適切にインデントできます。コマンドを使用して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

最終的にどのソリューションを使用するのか知りたいのですが、さらにサポートが必要な場合は、この投稿にコメントしてください。サポートさせていただきます。

56
Ryan

多くのPython愛好家は、Pythonがこのように、空白で区切られているという事実を愛しているので、現時点で現在あるかどうかは個人的に疑っています。

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

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

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

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

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

編集2:私はちょうど これを報告しました pythonバグトラッカーに

11
Mez

私は盲目ではありませんが、 Emacspeak について良いことを聞いたことがあります。 1998年の 8.0リリース 以来Pythonモードになっています(リリース28.0までのようです!)。ぜひチェックしてみてください。

9
technomalogical

Windowsを使用している場合は、EdSharpを参照することを強くお勧めします。 http://empowermentzone.com/EdSharp.htm 主要なWindowsスクリーンリーダーをすべてサポートしており、次のように構成できます。コードのインデントレベルを話すか、代わりに中括弧構文との間で変換できるPyBraceと呼ばれる組み込みユーティリティがあり、プログラマーがテキストエディターで期待するようになった他のあらゆる種類の機能をサポートします。 PHPからJavaScript、HTML、Pythonに至るまで、何年にもわたって使用してきました。大好きです。

6
fastfinge

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

それができない場合は、 pybraces があります。これは悪ふざけとして書かれていますが、実際には少し作業を行うと役立つ場合があります。

6
John Millikin

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

それはハックですが、あなたはそれを行うことができます。

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

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


余談ですが、python-私はallowing中括弧さえない背後にある理由を受け入れません/ generic block delimiters ... python devs。の設定であることを除けば、コードの自動処理を行っている場合やで作業している場合は、少なくとも中かっこが誤って食べられることはありません。空白が重要であることを理解していないエディター。コードを自動的に生成する場合は、インデントレベルを追跡する必要がないので便利です。python Perl風のワンライナーを使用すると、自動的に機能が低下します。他に何もない場合は、安全策として使用します。1000行のpythonプログラムがすべてのタブを食いつぶした場合はどうなりますか?行ごとに移動して、インデントがどこにあるべきかを理解するには?

それについて尋ねると、「__将来の__中括弧をインポートする」、「IDE正しく設定する」、「とにかく良いので、慣れてください」」のような冗談の応答が必ず得られます。それに」.。

私は彼らの要点を理解していますが、ねえ、私が望むなら、私はすべての行の後にセミコロンを置くことができます。ですから、なぜ誰もが中括弧のことについてそれほど固執しているのか理解できません。適切にインデントするように強制するために言語が必要な場合は、そもそもそれを正しく行っていません。

ちょうど私の2c-とにかく中括弧を使用するつもりです。

4
la11111

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

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

4
andy

アクセシブルなPython IDEを検索し、これを見つけて答えることにしました。WindowsとJAWSの場合:

  1. を押して設定センターに移動します JawsKey+6 (文字の上の数字の行)お気に入りのテキストエディタで。 JAWSが新しい構成ファイルの作成を要求する場合は、同意します。
  2. 検索フィールドに「インデント」と入力します
  3. 結果は「Sayindentcharacters」の1つだけになります。これをオンにします。
  4. 楽しい!

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

別のPython初心者)からのハッピーコーディング。

4

IDE私は多くの経験があります。また、ifステートメントやループなどのコーディングにスマートインデントを提供しているので、Eclipseをpydev拡張機能とともに使用しています。ピンデントを構成しました現在フォーカスされているpythonモジュールで実行できる外部ツールとしての.pyスクリプト。これにより、インデントを常にチェックしなくても、どこで閉じられているかを確認できます。

3
Jared

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

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

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

1
Saqib

Edsger Dijkstra 使用 if〜fi および do〜od 彼の「GuardedCommandLanguage」では、これらは ALGOL68RosettaCode.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保護されたブロックif/fi、do/od、try/yrtをセミコロン ";"と一緒に使用してステートメントを区切ると、コードを明確にマングル解除して再インデントできます。明確な雑誌リストに最適です。またはWebページから切り取って貼り付けます。

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

0
NevilleDNZ