Jestem całkowicie niewidomym programistą, który chciałby nauczyć się Pythona. Niestety fakt, że bloki kodu są reprezentowane z różnymi poziomami wcięć, jest główną przeszkodą. Zastanawiałem się, czy są dostępne jakieś narzędzia, które pozwoliłyby mi napisać kod za pomocą nawiasów klamrowych lub innego ogranicznika bloku kodu, a następnie przekonwertować ten format na odpowiednio wciętą reprezentację, której mógłby użyć interpreter Pythona?
python
accessibility
blind
blindness
Jared
źródło
źródło
Odpowiedzi:
Istnieje rozwiązanie twojego problemu, które jest dystrybuowane z samym Pythonem.
pindent.py
, znajduje się w katalogu Tools \ Scripts w instalacji systemu Windows (moja ścieżka do niego to C: \ Python25 \ Tools \ Scripts), wygląda na to, że musisz go pobrać z svn.python.org, jeśli używasz Linux lub OSX.Dodaje komentarze, gdy bloki są zamknięte, lub może prawidłowo wciskać kod, jeśli są wstawiane. Oto przykład kodu wyświetlanego przez pindent za pomocą polecenia:
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
Gdzie oryginał
myfile.py
był: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!'
Możesz również użyć
pindent.py -r
do wstawienia prawidłowego wcięcia na podstawie komentarzy (przeczytaj nagłówek pindent.py po szczegóły), powinno to pozwolić ci kodować w Pythonie bez obawy o wcięcia.Na przykład uruchomienie
pindent.py -r myfile.py
spowoduje przekonwertowanie następującego kodumyfile.py
na ten sam odpowiednio wcięty (i opatrzony komentarzem) kod, który został wygenerowany wpindent.py -c
powyższym przykładzie: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
Byłbym zainteresowany, aby dowiedzieć się, z jakiego rozwiązania korzystasz, jeśli potrzebujesz dalszej pomocy, skomentuj ten post, a postaram się pomóc.
źródło
pindent
kodu z równo z lewej strony (preferowany schemat wcięć wielu ślepych programistów) . Bardziej przydatne byłoby - ale nie jako jajko wielkanocne.from __future__ import braces
pindent.py -c
; to jestpindent.py -r
. Ryan już to zauważył w swojej odpowiedzi, ale po prostu zredagowałem ją, aby dodać wyraźny przykład i utrudnić przeoczenie. (Poprawiłem również opcję wiersza poleceń, aby to zrobić: to-r
, nie,-d
po prostu usuwa komentarze.)Osobiście wątpię, że w tej chwili tak jest, ponieważ wielu miłośników Pythona uwielbia fakt, że Python jest w ten sposób, rozdzielany białymi spacjami.
Jednak nigdy nie myślałem o tym jako o problemie z dostępnością. Może jest to coś, co można przedstawić jako raport o błędzie do Pythona?
Zakładam jednak, że używasz tutaj czytnika ekranu do wyjścia? Więc zakładki wydają się wam „niewidoczne”? Z wyjściem w alfabecie Braille'a może być łatwiejszy do odczytania, ale doskonale rozumiem, jak zagmatwane może to być.
W rzeczywistości jest to dla mnie bardzo interesujące. Żałuję, że nie wiem wystarczająco dużo, aby móc napisać aplikację, która zrobi to za Ciebie.
Myślę, że na pewno jest to coś, dla czego umieszczę raport o błędzie, chyba że sam to zrobiłeś lub chcesz.
Edit: Poza tym, jak zauważył przez Johna Millikin Istnieje również PyBraces co może być dobrym rozwiązaniem dla Ciebie i może być możliwe, aby być posiekany razem zależy od twoich umiejętności kodowania się dokładnie, co trzeba (i mam nadzieję, że jeśli to przypadek , udostępniasz go innym osobom takim jak ty do użytku)
Edycja 2: Właśnie zgłosiłem to do modułu śledzenia błędów Pythona
źródło
Chociaż nie jestem ślepy, słyszałem dobre rzeczy o Emacspeak . Mają tryb Pythona od czasu wydania 8.0 w 1998 roku (wydaje się, że są w wersji 28.0!). Zdecydowanie warto to sprawdzić.
źródło
Powinieneś być w stanie skonfigurować swój edytor tak, aby mówił tabulatory i spacje - wiem, że w większości edytorów można wyświetlać białe znaki, więc gdzieś musi być opcja dostępności, aby je wypowiedzieć.
W przeciwnym razie jest pybraces , który został napisany jako praktyczny żart, ale może ci się przydać przy odrobinie pracy.
źródło
Jeśli korzystasz z systemu Windows, zdecydowanie polecam zapoznać się z EdSharp z: http://empowermentzone.com/EdSharp.htm Obsługuje wszystkie wiodące czytniki ekranu systemu Windows, można go skonfigurować tak, aby mówił o poziomach wcięć kodu, lub ma wbudowane narzędzie o nazwie PyBrace, które może konwertować składnię nawiasów klamrowych do i ze składni nawiasów klamrowych, jeśli chcesz to zrobić, i obsługuje wszystkie rodzaje innych funkcji, których programiści oczekują od naszych edytorów tekstu. Używam go od lat do wszystkiego, od PHP po JavaScript, HTML i Python i uwielbiam to.
źródło
Doceniam twój problem, ale myślę, że zamiast problemu, który chcesz rozwiązać, określasz implementację. Zamiast konwertować na nawiasy klamrowe, co powiesz na sposób, w jaki czytnik zawartości ekranu będzie informował o poziomie wcięcia?
Na przykład niektórzy ludzie pracowali nad kolorowaniem składni vima, aby przedstawić poziomy wcięć w Pythonie. Być może zmodyfikowane kolorowanie składni mogłoby dać coś, co czytałby twój czytnik ekranu?
źródło
Wszystkie te odpowiedzi typu „nie, nie możesz” są naprawdę irytujące. Oczywiście, że możesz.
To hack, ale możesz to zrobić.
http://timhatch.com/projects/pybraces/
używa niestandardowego kodowania do konwersji nawiasów klamrowych na bloki z wcięciem przed przekazaniem tego interpreterowi.
Na marginesie i jako ktoś nowy w Pythonie - nie akceptuję argumentu stojącego za tym, że nawet nie pozwalam nawiasy klamrowe / ogólne ograniczniki bloków ... poza tym, że są to preferencje programistów Pythona. Przynajmniej nawiasy klamrowe nie zostaną przypadkowo zjedzone, jeśli wykonujesz jakieś automatyczne przetwarzanie kodu lub pracujesz w edytorze, który nie rozumie, że białe znaki są ważne. Jeśli generujesz kod automatycznie, nie musisz śledzić poziomów wcięć. Jeśli chcesz używać Pythona do tworzenia jednowierszowego tekstu w języku perl, jesteś automatycznie kaleką. Jeśli nic innego, po prostu jako zabezpieczenie. Co się stanie, jeśli twój 1000-liniowy program w Pythonie zostanie zjedzony wszystkie jego karty? Zamierzasz przejść linia po linii i dowiedzieć się, gdzie powinno być wcięcie?
Zapytanie o to niezmiennie spowoduje nieprzyjemną odpowiedź, taką jak „po prostu zrób” z __ przyszłości __ importuj nawiasy klamrowe ”,„ skonfiguruj poprawnie swoje IDE ”,„ i tak jest lepiej, więc przyzwyczaj się do tego ”...
Rozumiem ich rację, ale hej, gdybym chciał, mógłbym umieścić średnik po każdym wierszu. Więc nie rozumiem, dlaczego wszyscy są tak nieugięci w kwestii aparatu ortodontycznego. Jeśli potrzebujesz języka, aby zmusić Cię do prawidłowego wcięcia, to przede wszystkim nie robisz tego dobrze.
Tylko moje 2c - i tak będę używał szelek.
źródło
Przeszukując dostępne środowisko Python IDE, znalazłem to i postanowiłem odpowiedzieć. W systemie Windows z JAWS:
Jedyne, co nas frustruje, to to, że nie możemy cieszyć się przykładami kodu na stronach internetowych (ponieważ wypowiadanie wcięć w przeglądarkach nie jest zbyt wygodne - generuje zbędną mowę).
Miłego kodowania od innego początkującego Pythona).
źródło
Używam eclipse z rozszerzeniami pydev, ponieważ jest to IDE, z którym mam duże doświadczenie. Doceniam również inteligentne wcięcia, które oferuje do kodowania instrukcji, pętli itp. Skonfigurowałem skrypt pindent.py jako zewnętrzne narzędzie, które mogę uruchomić na obecnie skoncentrowanym module Pythona, co ułatwia mi życie, dzięki czemu mogę zobaczyć, co jest zamknięte gdzie bez konieczności ciągłego sprawdzania wcięć.
źródło
Istnieje wiele odpowiedzi wyjaśniających, jak to zrobić. Ale radziłbym nie wybierać tej trasy. Chociaż można użyć skryptu do wykonania konwersji, utrudniłoby to pracę nad projektem zespołowym.
Moją rekomendacją byłoby skonfigurowanie czytnika ekranu, aby ogłaszał karty. Nie jest to tak denerwujące, jak się wydaje, ponieważ powiedziałoby tylko „wcięcie 5”, a nie „zakładka, karta, karta, karta”. Co więcej, wcięcie będzie odczytywane tylko wtedy, gdy ulegnie zmianie, więc możesz przejść przez cały blok kodu bez usłyszenia poziomu wcięcia. W ten sposób słyszenie wcięcia nie jest bardziej gadatliwe niż słyszenie szelek.
Ponieważ nie wiem, jakiego systemu operacyjnego lub czytnika ekranu używasz, niestety nie mogę podać dokładnych kroków, aby to osiągnąć.
źródło
Edsger Dijkstra użył if ~ fi i do ~ od w swoim "Guarded Command Language", te wydają się pochodzić z Algol68 . Było też kilka przykładowych bloków chronionych przez Pythona używanych w 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)
Zmieniony kod Pythona z białymi znakami może zostać jednoznacznie usunięty i zmieniony, jeśli użyje się chronionych bloków if / fi, do / od & try / yrt razem ze średnikami ";" rozdzielić oświadczenia. Doskonały do jednoznacznych list czasopism lub wycinania / wklejania ze stron internetowych.
Powinno być wystarczająco łatwe napisanie krótkiego programu w Pythonie, który wstawi / usunie bloki ochronne i średniki.
źródło