Domanda

Sono un programmatore totalmente cieco che vorrebbe imparare Python. Sfortunatamente il fatto che i blocchi di codice siano rappresentati con diversi livelli di rientro è un grosso ostacolo. Mi chiedevo se fossero disponibili strumenti che mi permettessero di scrivere codice usando parentesi graffe o qualche altro delimitatore di blocchi di codice e poi convertire quel formato in una rappresentazione correttamente rientrata che l'interprete di Python potrebbe usare?

È stato utile?

Soluzione

C'è una soluzione al tuo problema che viene distribuita con Python stesso. pindent.py , si trova nella directory Tools \ Scripts in un'installazione di Windows (il mio percorso è C: \ Python25 \ Tools \ Scripts), sembra che dovresti prendilo da svn.python.org se stai eseguendo Linux o OSX.

Aggiunge commenti quando i blocchi sono chiusi o può indentare correttamente il codice se i commenti vengono inseriti. Ecco un esempio del codice prodotto da pindent con il comando:

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

Dove si trovava l'originale 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!'

Puoi anche usare pindent.py -r per inserire il rientro corretto in base ai commenti (leggi l'intestazione di pindent.py per i dettagli), questo dovrebbe permetterti di scrivere codice in Python senza preoccuparti di indentazione.

Ad esempio, l'esecuzione di pindent.py -r myfile.py convertirà il seguente codice in myfile.py nello stesso codice correttamente indentato (e anche commentato) come prodotto dall'esempio pindent.py -c sopra:

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

Sarei interessato a sapere quale soluzione utilizzi, se hai bisogno di ulteriore assistenza, commenta questo post e cercherò di aiutarti.

Altri suggerimenti

Personalmente dubito che al momento ci sia, dato che molti affiliati a Python adorano il fatto che Python sia così, delimitato da spazi bianchi.

In realtà non l'ho mai considerato un problema di accessibilità. Forse è qualcosa da presentare come segnalazione di bug a Python?

Suppongo che tu usi uno screen reader qui per l'output? Quindi le schede sembrerebbero "invisibili" a te? Con un output Braille, potrebbe essere più facile da leggere, ma posso capire esattamente quanto possa essere confuso.

In effetti, questo è molto interessante per me. Vorrei sapere abbastanza per poter scrivere un'app che lo farà per te.

Penso che sia sicuramente qualcosa per cui inserirò una segnalazione di bug, a meno che tu non l'abbia già fatto da solo o non desideri.

Modifica: inoltre, come annotato da John Millikin Esistono anche PyBraces che potrebbe essere praticabile soluzione per te e potrebbe essere possibile essere hackerati insieme in base alle tue capacità di codifica per essere esattamente ciò di cui hai bisogno (e spero che, in tal caso, lo rilasci affinché altri come te lo utilizzino)

Modifica 2: ho appena segnalato questo al tracker dei bug di Python

Anche se non sono cieco, ho sentito cose positive su Emacspeak . Hanno avuto una modalità Python dalla loro 8.0 release nel 1998 (sembrano essere fino alla versione 28.0!). Sicuramente vale la pena dare un'occhiata.

Dovresti essere in grado di configurare il tuo editor per pronunciare le schede e gli spazi - so che è possibile visualizzare spazi bianchi nella maggior parte degli editor, quindi ci deve essere un'opzione di accessibilità da qualche parte per parlarli.

In caso contrario, c'è pybraces , che è stato scritto come uno scherzo pratico ma potrebbe effettivamente essere utile per te con un po 'di lavoro.

Se sei su Windows, ti consiglio vivamente di dare un'occhiata a EdSharp da: http://empowermentzone.com/EdSharp.htm Supporta tutti i principali screen reader Windows, può essere configurato per parlare dei livelli di rientro del codice, oppure ha un'utilità integrata chiamata PyBrace che può convertire da e verso la sintassi delle parentesi graffe se si desidera farlo, e supporta tutti tipi di altre funzionalità che i programmatori si aspettano dai nostri editor di testo. Lo uso da anni, per tutto, da PHP a JavaScript a HTML a Python, e lo adoro.

Apprezzo il tuo problema, ma penso che tu stia specificando l'implementazione invece del problema che devi risolvere. Invece di convertire in parentesi graffe, che ne dici di lavorare su un modo per il tuo screen reader di dirti il ??livello di rientro?

Ad esempio, alcune persone hanno lavorato sulla colorazione della sintassi di VIM per rappresentano i livelli di rientro del pitone. Forse una colorazione della sintassi modificata potrebbe produrre qualcosa che il tuo screen reader potrebbe leggere?

Tutti questi " no non puoi " i tipi di risposte sono davvero fastidiosi. Certo che puoi.

È un trucco, ma puoi farlo.

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

utilizza una codifica personalizzata per convertire le parentesi graffe in blocchi rientrati prima di consegnarlo all'interprete.


A parte questo, e come qualcuno che non conosce Python, non accetto il ragionamento che sta alla base nemmeno consentendo parentesi graffe / delimitatori di blocchi generici ... a parte che è la preferenza degli sviluppatori python . Le parentesi graffe almeno non verranno mangiate accidentalmente se stai eseguendo un'elaborazione automatica del tuo codice o stai lavorando in un editor che non capisce che lo spazio bianco è importante. Se stai generando codice automaticamente, è utile non tenere traccia dei livelli di rientro. Se vuoi usare Python per fare un one-liner perl-esque, sei automaticamente paralizzato. Se non altro, solo per salvaguardia. Cosa succederebbe se il tuo programma Python a 1000 linee venisse mangiato tutte le sue schede? Andrai riga per riga e scoprirai dove dovrebbe essere il rientro?

Chiedendolo, invariabilmente otterrai una risposta ironica come " fai 'da __ futuro __ importare parentesi' " ;, " configura il tuo IDE correttamente " ;, " è comunque meglio quindi abituati " ; ...

Vedo il loro punto, ma ehi, se volessi, potrei mettere un punto e virgola dopo ogni singola riga. Quindi non capisco perché tutti siano così irremovibili riguardo alla parentesi graffa. Se hai bisogno della tua lingua per costringerti a rientrare correttamente, non lo stai facendo bene in primo luogo.

Solo il mio 2c - userò comunque le parentesi graffe.

Cercando un IDE Python accessibile, ho trovato questo e ho deciso di rispondere. In Windows con JAWS:

  1. Vai al Centro impostazioni premendo JawsKey + 6 (nella riga del numero sopra le lettere) nel tuo editor di testo preferito. Se JAWS richiede di creare un nuovo file di configurazione, accetta.
  2. Nel campo di ricerca, digita " indent "
  3. Ci sarà un solo risultato: " Pronuncia caratteri di rientro " ;. Attiva.
  4. Buon divertimento!

L'unica cosa frustrante per noi è che non possiamo apprezzare esempi di codice sui siti Web (poiché il rientro nei browser non è troppo comodo, genera un linguaggio superfluo).

Buona codifica da un altro principiante di Python).

Uso eclipse con le estensioni pydev poiché è un IDE con cui ho molta esperienza. Apprezzo anche il rientro intelligente che offre per la codifica di istruzioni, loop, ecc. Ho configurato lo script pindent.py come uno strumento esterno che posso eseguire sul modulo python attualmente focalizzato che mi semplifica la vita in modo da poter vedere cosa è chiuso dove senza dover controllare costantemente il rientro.

Ci sono varie risposte che spiegano come farlo. Ma consiglierei di non seguire questa strada. Mentre potresti usare uno script per fare la conversione, renderebbe difficile lavorare su un progetto di squadra.

La mia raccomandazione sarebbe quella di configurare il tuo screen reader per annunciare le schede. Questo non è così fastidioso come sembra, poiché direbbe solo "trattino 5". anziché " tab tab tab tab tab tab " ;. Inoltre, il rientro verrebbe letto solo ogni volta che è cambiato, quindi potresti passare attraverso un intero blocco di codice senza sentire il livello di rientro. In questo modo ascoltare il rientro non è più prolisso che ascoltare le parentesi graffe.

Dato che non so quale sistema operativo o screen reader utilizzi, purtroppo non posso fornire i passaggi esatti per raggiungere questo obiettivo.

Edsger Dijkstra usato if ~ fi e do ~ od nel suo" linguaggio di comando custodito ", questi sembrano provenire dal Algol68 . Ci sono stati anche alcuni esempi di blocchi protetti in pitone utilizzati in 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)

Il codice Python manoscritto degli spazi bianchi può essere inequivocabilmente non districato e reindirizzato se si usa blocchi protetti se / fi, do / od & amp; prova / yrt insieme al punto e virgola " ;; " per separare le dichiarazioni. Eccellente per elenchi di riviste inequivocabili o per tagliare / incollare da pagine Web.

Dovrebbe essere abbastanza facile scrivere un breve programma Python per inserire / rimuovere i blocchi di protezione e i punti e virgola.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top