Frage Gibt es eine Möglichkeit, den Einzug in Python-Code in geschweifte Klammern umzuwandeln?


Ich bin ein total blinder Programmierer, der gerne Python lernen möchte. Leider ist die Tatsache, dass Codeblöcke mit verschiedenen Ebenen der Einrückung dargestellt werden, ein großer Stolperstein. Ich fragte mich, ob es irgendwelche Werkzeuge gab, die es mir erlauben würden, Code mit geschweiften Klammern oder einem anderen Code-Block-Begrenzer zu schreiben und dann dieses Format in eine korrekt eingerückte Darstellung zu konvertieren, die der Python-Interpreter verwenden könnte.


76
2017-09-23 01:33


Ursprung


Antworten:


Es gibt eine Lösung für Ihr Problem, das mit Python selbst verteilt wird. pindent.pyEs befindet sich im Verzeichnis Tools \ Scripts in einer Windows-Installation (mein Pfad dazu ist C: \ Python25 \ Tools \ Scripts), es sieht so aus, als hätten Sie es von svn.python.org, wenn Sie unter Linux laufen oder OSX.

Es fügt Kommentare hinzu, wenn Blöcke geschlossen sind, oder kann Code korrekt einrücken, wenn Kommentare eingefügt werden. Hier ist ein Beispiel für den Code, der von pindent mit dem Befehl ausgegeben wird:

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

Wo das Original myfile.py war:

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!'

Sie können auch verwenden pindent.py -d Um die richtige Einrückung basierend auf Kommentaren einzufügen (lesen Sie den Header von pindent.py für Details), sollte dies Ihnen ermöglichen, in Python zu codieren, ohne sich Gedanken über den Einzug machen zu müssen.

Ich würde gerne erfahren, welche Lösung Sie verwenden, wenn Sie weitere Hilfe benötigen, kommentieren Sie bitte diesen Beitrag und ich werde versuchen, Ihnen zu helfen.


53
2017-09-23 02:04



Python unterstützt Klammern zum Definieren von Codeblöcken und unterstützt auch die Verwendung von "Begin" - und "End" -Tags.

Bitte beachten Sie diese Codebeispiele:

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

Und ein Beispiel mit Bash-Stil:

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

Das Beste daran ist, dass Sie vergessen können, eine enge Klammer zu setzen, und es ist immer noch gültig Python!

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

ursprünglicher Knebel

Mein richtiger Ratschlag ist, eine Braille-Anzeige zu bekommen, wenn man sich eine / eine Quelle leisten kann - blinde Python-Programmierer meiner Bekannten haben wirklich eine Braille-Anzeige gefunden, die zum Schreiben von Python-Programmen unentbehrlich ist, macht die Einrückung viel weniger schmerzhaft. Ein 40-Zellen-Display ist es wert.


24
2017-09-23 02:02



Ich persönlich bezweifle, dass es momentan im Moment noch so ist, da viele Python-Fans die Tatsache lieben, dass Python so whitespace-abgegrenzt ist.

Ich habe das jedoch nie als Problem der Barrierefreiheit betrachtet. Vielleicht ist es etwas, um Python einen Fehlerbericht zu melden?

Ich würde annehmen, dass Sie hier jedoch einen Bildschirmleser für die Ausgabe verwenden? Also würden die Tabs für Sie "unsichtbar" erscheinen? Mit einer Braille-Ausgabe könnte es einfacher zu lesen sein, aber ich kann genau verstehen, wie verwirrend das sein könnte.

In der Tat ist das sehr interessant für mich. Ich wünschte, ich wüsste genug, um eine App schreiben zu können, die das für dich tun wird.

Ich denke, es ist definitiv etwas, in das ich einen Fehlerbericht schreiben werde, es sei denn, du hast es selbst schon getan oder willst es.

Bearbeiten: Auch als bemerkt durch John Millikin Es gibt auch PyBraces Das könnte eine praktikable Lösung für Sie sein, und möglicherweise ist es möglich, zusammengehackt zu werden, abhängig von Ihren Programmierkenntnissen, um genau das zu sein, was Sie brauchen (und ich hoffe, dass Sie es für andere wie Sie selbst freigeben).

Edit 2: Ich habe nur meldete dies zum Python Bug Tracker


10
2017-09-23 01:35



Obwohl ich nicht blind bin, habe ich gute Dinge gehört Emacspeak. Sie haben einen Python-Modus seit ihrer 8.0 Veröffentlichung 1998 (sie scheinen bis Release 28.0 zu sein!). Auf jeden Fall einen Besuch wert.


9
2017-09-23 01:51



Sie sollten in der Lage sein, Ihren Editor zu konfigurieren, um die Tabs und Leerzeichen zu sprechen - ich weiß, dass es möglich ist Anzeige Whitespace in den meisten Editoren, also muss irgendwo eine Barrierefreiheitsmöglichkeit vorhanden sein, um sie zu sprechen.

Versäumt es das, gibt es Pyracken, die als ein praktischer Witz geschrieben wurde, aber vielleicht mit ein bisschen Arbeit für Sie nützlich sein könnte.


6
2017-09-23 01:38



Wenn Sie unter Windows arbeiten, empfehlen wir dringend, dass Sie sich EdSharp ansehen von: http://empowermentzone.com/EdSharp.htm Es unterstützt alle führenden Windows-Screenreader, es kann so konfiguriert werden, dass es die Einrückungsebenen von Code spricht, oder es hat ein eingebautes Dienstprogramm namens PyBrace, das in und aus Klammern-Syntax konvertieren kann, wenn Sie dies stattdessen tun möchten und es alle unterstützt andere Features, die Programmierer in unseren Texteditoren erwarten. Ich benutze es seit Jahren für alles von PHP über JavaScript zu HTML bis Python und ich liebe es.


6
2017-11-08 15:40



Ich schätze Ihr Problem, denke aber, dass Sie die Implementierung angeben und nicht das Problem, das Sie lösen müssen. Anstatt in geschweifte Klammern umzuwandeln, wie wäre es mit einer Art und Weise, wie der Screenreader Ihnen die Einrückungsebene mitteilen kann?

Beispielsweise, einige Leute habe an der vim-Syntaxfarbe gearbeitet, um Python-Einrückungsstufen darzustellen. Vielleicht könnte eine modifizierte Syntaxfarbe etwas erzeugen, was Ihr Bildschirmleser lesen würde?


4
2017-09-23 01:43