Pregunta ¿Hay alguna forma de convertir la sangría en el código Python en llaves?


Soy un programador totalmente ciego que desea aprender Python. Desafortunadamente, el hecho de que los bloques de código estén representados con diferentes niveles de sangría es un gran obstáculo. Me preguntaba si había alguna herramienta disponible que me permitiera escribir código usando llaves o algún otro delimitador de bloque de código y luego convertir ese formato a una representación con sangría apropiada que el intérprete de Python podría usar.


76
2017-09-23 01:33


origen


Respuestas:


Hay una solución a su problema que se distribuye con Python. pindent.py, está ubicado en el directorio Tools \ Scripts en una instalación de Windows (mi ruta de acceso es C: \ Python25 \ Tools \ Scripts), parece que lo hubiera obtenido de svn.python.org si está ejecutando Linux o OSX.

Agrega comentarios cuando los bloques están cerrados, o puede sangrar correctamente el código si se incluyen los comentarios. Aquí hay un ejemplo del código emitido por pindent con el comando:

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

Donde el original myfile.py estaba:

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

También puedes usar pindent.py -d para insertar la sangría correcta basada en los comentarios (lea el encabezado de pindent.py para más detalles), esto debería permitirle codificar en Python sin preocuparse por la sangría.

Me gustaría saber qué solución terminas usando, si necesitas más ayuda, por favor comenta esta publicación e intentaré ayudarte.


53
2017-09-23 02:04



Python admite llaves para definir bloques de código, y también admite el uso de etiquetas 'begin' y 'end'.

Por favor vea estos ejemplos de código:

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

Y un ejemplo con estilo bash:

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

Lo mejor de esto es que puedes olvidarte de poner un corchete cercano, ¡y sigue siendo un pitón válido!

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

mordaza original

Mi verdadero consejo es obtener una pantalla en Braille si puedes pagar una / fuente uno: los programadores de pitones ciegos de mi conocimiento realmente encontraron una pantalla Braille indispensable para escribir programas de pitón, hace que la sangría sea mucho menos dolorosa. Una pantalla de 40 celdas vale la pena.


24
2017-09-23 02:02



Personalmente, dudo que exista actualmente, ya que a muchos de los aficionados de Python les encanta el hecho de que Python sea de esta manera, delimitado por espacios en blanco.

Sin embargo, nunca pensé en eso como un problema de accesibilidad. Tal vez es algo que presentar como un informe de error a Python?

Supongo que utiliza un lector de pantalla aquí sin embargo para la salida? ¿Entonces las pestañas te parecerían "invisibles"? Con una salida de Braille, podría ser más fácil de leer, pero puedo entender exactamente qué tan confuso puede ser.

De hecho, esto es muy interesante para mí. Desearía saber lo suficiente para poder escribir una aplicación que haga esto por ti.

Creo que definitivamente es algo por lo que incluiré un informe de error, a menos que ya lo haya hecho usted mismo o desee.

Editar: También, como célebre por John Millikin También hay PyBraces Lo cual podría ser una solución viable para usted, y es posible que sea pirateado dependiendo de sus habilidades de codificación para ser exactamente lo que necesita (y espero que si ese es el caso, lo libere para que otros como usted lo usen)

Editar 2: Acabo de informó esto al rastreador de errores python


10
2017-09-23 01:35



Aunque no soy ciego, he oído cosas buenas sobre Emacspeak. Han tenido un modo Python desde su Versión 8.0 en 1998 (¡parecen estar listos para lanzar 28.0!). Definitivamente vale la pena echarle un vistazo.


9
2017-09-23 01:51



Debería poder configurar su editor para hablar las pestañas y espacios, sé que es posible monitor espacios en blanco en la mayoría de los editores, por lo que debe haber una opción de accesibilidad en algún lugar para hablarlos.

Si eso falla, hay pybraces, que fue escrito como una broma, pero podría ser útil para usted con un poco de trabajo.


6
2017-09-23 01:38



Si está en Windows, le recomiendo que eche un vistazo a EdSharp desde: http://empowermentzone.com/EdSharp.htm Es compatible con todos los principales lectores de pantalla de Windows, se puede configurar para hablar los niveles de sangría del código, o tiene una utilidad incorporada llamada PyBrace que puede convertir ay desde la sintaxis de llaves si lo desea, y es compatible con todos tipos de otras características que los programadores esperan en nuestros editores de texto. Lo he estado usando durante años, desde PHP hasta JavaScript, desde HTML hasta Python, y me encanta.


6
2017-11-08 15:40



Aprecio su problema, pero creo que está especificando la implementación en lugar del problema que necesita resolver. En lugar de convertirlo en llaves, ¿qué hay de trabajar en una forma de que su lector de pantalla le diga el nivel de sangría?

Por ejemplo, algunas personas han trabajado en la coloración de la sintaxis vim para representar los niveles de sangría python. ¿Tal vez una coloración de sintaxis modificada podría producir algo que su lector de pantalla leería?


4
2017-09-23 01:43



Todos estos tipos de respuestas "no, no puedes" son realmente molestas. Por supuesto que puede.

Es un truco, pero puedes hacerlo.

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

utiliza una codificación personalizada para convertir las llaves en bloques con sangría antes de entregárselo al intérprete.


Como un lado, y como alguien nuevo en Python - no acepto el razonamiento detrás ni siquiera permitir llaves / delimitadores genéricos de bloques ... aparte de eso, es la preferencia de los desarrolladores de python. Los apoyos al menos no se comerán accidentalmente si está haciendo un procesamiento automático de su código o trabajando en un editor que no entiende que el espacio en blanco es importante. Si está generando código automáticamente, es útil no tener que hacer un seguimiento de los niveles de indentación. Si quieres usar Python para hacer un estilo único de Perl-esque, estás automáticamente lisiado. Si nada más, solo como salvaguarda. ¿Qué pasa si tu programa de 1000 líneas de python obtiene todas sus pestañas? Vas a ir línea por línea y averiguar dónde debe ser el sangrado?

Preguntar al respecto invariablemente tendrá una respuesta irónica como "just do 'de __ future __ import llaves'", "configure su IDE correctamente", "de todos modos es mejor, así que acostúmbrate a eso" ...

Veo su punto, pero bueno, si quisiera, podría poner un punto y coma después de cada línea. Así que no entiendo por qué todos son tan inflexibles sobre las llaves. Si necesita su idioma para obligarlo a sangrar correctamente, no lo está haciendo desde el principio.

Solo mi 2c - Voy a usar aparatos de todos modos.


4
2017-07-08 09:42



Utilizo eclipse con las extensiones pydev ya que es un IDE con el que tengo mucha experiencia. También aprecio la sangría inteligente que ofrece para codificar declaraciones, bucles, etc. He configurado el script pindent.py como una herramienta externa que puedo ejecutar en el módulo Python actualmente enfocado, lo que hace mi vida más fácil para que pueda ver qué es cerrado donde sin tener que revisar constantemente la sangría.


3
2017-10-25 20:06



Buscando un IDE de Python accesible, encontré esto y decidí responder. En Windows con JAWS:

  1. Ir al Centro de configuración presionando JawsKey+6 (en la fila numérica encima de las letras) en su editor de texto favorito. Si JAWS le pide que cree un nuevo archivo de configuración, acuerde.
  2. En el campo de búsqueda, escribe "sangría"
  3. Solo habrá un resultado: "Decir caracteres de sangrado". Enciende esto.
  4. ¡Disfrutar!

Lo único que es frustrante para nosotros es que no podemos disfrutar de ejemplos de código en sitios web (ya que la sangría en los navegadores no es muy cómoda, genera un habla superflua).

Feliz codificación de otro principiante de Python).


3
2017-08-16 23:34