Question

Je suis un programmeur totalement aveugle qui aimerait apprendre Python. Malheureusement, le fait que les blocs de code soient représentés avec différents niveaux d'indentation constitue un obstacle majeur. Je me demandais s’il existait des outils me permettant d’écrire du code en utilisant des accolades ou un autre délimiteur de bloc de code, puis de convertir ce format en une représentation correctement indentée que l’interpréteur Python pourrait utiliser?

Était-ce utile?

La solution

Il existe une solution à votre problème qui est distribuée avec Python lui-même. pindent.py , il se trouve dans le répertoire Tools \ Scripts d'une installation Windows (mon chemin d'accès est C: \ Python25 \ Tools \ Scripts), il semblerait que vous deviez récupérez-le sur svn.python.org si vous l'exécutez Linux ou OSX.

Il ajoute des commentaires lorsque des blocs sont fermés ou peut indenter correctement du code si des commentaires sont insérés. Voici un exemple du code généré par pindent avec la commande:

pindent.py -c monfichier.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

Où le myfile.py d'origine était:

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

Vous pouvez également utiliser pindent.py -r pour insérer l'indentation correcte en fonction des commentaires (lisez l'en-tête de pindent.py pour plus de détails), cela devrait vous permettre de coder en python sans vous soucier de indentation.

Par exemple, exécuter pindent.py -r monfichier.py convertira le code suivant en monfichier.py dans le même code correctement mis en retrait (et commenté) comme produit par l'exemple pindent.py -c ci-dessus:

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

Je souhaiterais savoir quelle solution vous utilisez, si vous avez besoin d'aide, commentez ce billet et j'essaierai de vous aider.

Autres conseils

Personnellement, je doute qu’il en soit pour le moment, car de nombreux aficionados du Python aiment le fait que Python soit ainsi, délimité par des espaces.

Je n’ai jamais vraiment pensé à cela comme un problème d’accessibilité. Peut-être que c'est quelque chose à mettre en avant comme rapport de bogue à Python?

Je suppose que vous utilisez toutefois un lecteur d’écran ici pour la sortie? Ainsi, les onglets sembleraient "invisibles". à toi? Avec une sortie en braille, la lecture sera peut-être plus facile, mais je peux comprendre à quel point cela pourrait être déroutant.

En fait, cela m’intéresse beaucoup. J'espère en savoir assez pour pouvoir écrire une application qui le fera pour vous.

Je pense que c'est définitivement quelque chose pour lequel je vais mettre un rapport de bogue, à moins que vous ne l'ayez déjà fait vous-même ou que vous le vouliez.

Modifier: en outre, comme mentionné par John Millikin Il existe également des PyBraces qui pourraient être viables Il est possible que vous trouviez une solution à votre problème et que vous puissiez éventuellement être regroupé en fonction de vos compétences en matière de codage afin d’être exactement ce dont vous avez besoin (et j’espère que si tel est le cas, vous le publiez pour que d’autres comme vous l’utilisent)

Modifier 2: je viens de signaler ce problème au gestionnaire de bogues python

.

Bien que je ne sois pas aveugle, j'ai entendu de bonnes choses à propos de Emacspeak . Ils utilisent le mode Python depuis leur version 8.0 en 1998 (ils semblent être à la libération 28.0!). Vaut vraiment le détour.

Vous devriez pouvoir configurer votre éditeur pour qu'il lise les onglets et les espaces - je sais qu'il est possible d'afficher les espaces dans la plupart des éditeurs. Il doit donc exister une option d'accessibilité pour les parler.

A défaut, il existe pybraces , écrit comme une blague mais qui pourrait en réalité être utile pour vous avec un peu de travail.

Si vous utilisez Windows, je vous recommande vivement de consulter EdSharp sous: http://empowermentzone.com/EdSharp.htm Il prend en charge tous les principaux lecteurs d’écran Windows, il peut être configuré pour indiquer les niveaux de code d’indentation, ou il possède un utilitaire intégré appelé PyBrace qui peut convertir la syntaxe en accolades si vous souhaitez le faire à la place, et il prend en charge tous les types de fichiers. types d’autres fonctionnalités attendues par les programmeurs dans nos éditeurs de texte. Je l'utilise depuis des années, de PHP à JavaScript, en passant par HTML et Python, et j'adore ça.

J'apprécie votre problème, mais je pense que vous spécifiez la mise en œuvre au lieu du problème que vous avez besoin de résoudre. Au lieu de convertir en accolades, que diriez-vous de trouver un moyen pour votre lecteur d'écran de vous indiquer le niveau d'indentation?

Par exemple, certaines personnes ont travaillé sur la coloration de la syntaxe vim pour représentent les niveaux d'indentation de python. Peut-être qu'une coloration de syntaxe modifiée pourrait produire quelque chose que votre lecteur d'écran lirait?

Tous ces messages "non, vous ne pouvez pas". Les types de réponses sont vraiment énervants. Bien sûr que vous pouvez.

C'est un bidouillage, mais vous pouvez le faire.

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

utilise un encodage personnalisé pour convertir les accolades en blocs en retrait avant de les transmettre à l'interprète.

En aparté et nouveau venu dans Python - Je n'accepte pas le raisonnement derrière ne pas même autoriser accolades / délimiteurs de blocs génériques ... mis à part le fait que ce soit la préférence des développeurs python . Les accolades au moins ne seront pas mangées accidentellement si vous effectuez un traitement automatique de votre code ou si vous travaillez dans un éditeur qui ne comprend pas que l’espace blanc est important. Si vous générez du code automatiquement, il est pratique de ne pas avoir à suivre les niveaux de retrait. Si vous voulez utiliser python pour faire un one-liner perl-esque, vous êtes automatiquement paralysé. Si rien d'autre, juste comme une sauvegarde. Que se passe-t-il si votre programme Python de 1000 lignes obtient tous ses onglets mangé? Vous allez aller ligne par ligne et trouver où devrait être l'indentation?

Poser la question obtiendra invariablement une réponse ironique comme "il suffit de faire" à partir de __ futurs __ importations accolades "", "," configurez votre IDE correctement "," il vaut mieux de toute façon, il est préférable de s'y habituer ". ; ...

Je vois leur intérêt, mais bon, si je voulais, je pourrais mettre un point-virgule après chaque ligne. Donc, je ne comprends pas pourquoi tout le monde est si catégorique à propos des accolades. Si vous avez besoin de votre langue pour vous forcer à mettre en retrait correctement, vous ne le faites pas correctement dès le départ.

Juste mon 2c - Je vais quand même utiliser des accolades.

Une recherche dans un environnement de développement Python accessible a trouvé ceci et décidé de répondre. Sous Windows avec JAWS:

  1. Accédez au Centre de configuration en appuyant sur JawsKey + 6 (dans la rangée de chiffres au-dessus des lettres) dans votre éditeur de texte préféré. Si JAWS vous invite à créer un nouveau fichier de configuration, acceptez-le.
  2. Dans le champ de recherche, tapez "indent" "
  3. .
  4. Il n'y aura qu'un seul résultat: "Prononcez des caractères d'indentation". Activez cette option.
  5. Profitez!

La seule chose qui nous frustre, c’est que nous ne pouvons pas profiter des exemples de code sur les sites Web (parler indenté dans les navigateurs n’est pas très confortable - cela génère des paroles superflues).

Joyeux codage d’un autre débutant en Python).

J'utilise eclipse avec les extensions pydev car c'est un IDE avec lequel j'ai beaucoup d'expérience. J'apprécie également l'indentation intelligente qu'il offre pour le codage des instructions, des boucles, etc. J'ai configuré le script pindent.py en tant qu'outil externe que je peux exécuter sur le module python actuellement ciblé, ce qui me simplifie la vie de façon à ce que je voie fermé où sans avoir à vérifier constamment l'indentation.

Différentes réponses expliquent comment procéder. Mais je recommanderais de ne pas prendre cet itinéraire. Bien que vous puissiez utiliser un script pour effectuer la conversion, il serait difficile de travailler sur un projet d’équipe.

Ma recommandation serait de configurer votre lecteur d’écran pour annoncer les onglets. Cela n’est pas aussi ennuyant que cela puisse paraître, car cela signifierait seulement "retrait 5". plutôt que "onglet onglet onglet onglet". De plus, l'indentation ne serait lue que chaque fois qu'elle changerait, de sorte que vous pourriez parcourir tout un bloc de code sans entendre le niveau d'indentation. De cette manière, entendre l'indentation n'est pas plus verbeux que d'entendre les accolades.

Comme je ne sais pas quel système d’exploitation ni quel lecteur d’écran vous utilisez, je ne peux malheureusement pas vous donner les étapes exactes pour y parvenir.

Edsger Dijkstra a utilisé si ~ fi et do ~ od dans son" langage de commande gardée ", ils semblent provenir de Algol68 . Quelques exemples de blocs protégés par le python ont également été utilisés dans 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)

Le code python mutilé dans l’espace blanc peut être clairement démêlé et réindiqué si on utilise blocs gardés si / fi, do / od & amp; essayez / yrt avec des points-virgules " ;; séparer les déclarations. Excellent pour les listes de magazines sans équivoque ou les copier / coller à partir de pages Web.

Il devrait être assez facile d'écrire un court programme python pour insérer / supprimer les blocs de garde et les points-virgules.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top