English version of this page

TorPy

La Tortue Python vernaculaire.


Présentation

TorPy est une version francisée (mais pouvant être traduite dans toute autre langue) du module turtle de Python.
Inspiré de la tortue Logo, turtle permet d'apprendre à programmer, puisqu'on écrit les instructions que la tortue n'effectuera qu'ensuite.
De plus cela permet de produire de belles figures géométriques.

J'ai écrit TorPy après avoir fait des essais d'utilisation de turtle avec des élèves de collège, et son but est de pallier quelques difficultés rencontrées.

Quelques particularités de TorPy :

TorPy est un logiciel multiplateforme, libre (licence GNU GPL 3), développé en Python (langage de programmation) et PyQt (ou PySide) pour l'interface graphique.


Téléchargement et installation

Pour fonctionner, TorPy a besoin de

GNU/Linux

Windows

Mac OS X

Sources


Première séance en classe


Quelques exemples

Les versions ci-dessous ne sont pas celles attendues des élèves (utilisation de fonctions, de variables).

la maison sans lever le crayon

def maison(debut=(0, 0), cote=100, delai=0):
            
                va(debut[0], debut[1])
                for i in range(4):
                    av(cote)
                    attendre(delai)
                    tg(90)
                    attendre(delai)
            
                diagonale = cote * racine(2)
            
                tg(45)
                attendre(delai)
                avance(diagonale)
                attendre(delai)
                tg(90)
                attendre(delai)
                avance(diagonale / 2)
                attendre(delai)
                tg(90)
                attendre(delai)
                avance(diagonale / 2)
                attendre(delai)
                tg(90)
                attendre(delai)
                avance(diagonale)
                attendre(delai)
            
            
            dimensions = 200
            depart = -dimensions / 2
            
            #maison(debut=(depart, depart), cote=dimensions)
            maison(debut=(depart, depart), cote=dimensions, delai=0.5)
            
            depart = -100 - dimensions / 2
            va(depart, depart)
            couleur('rouge')
            ecris("C'EST LA MAISON DE LA TORTUE...", 16)
            
            va(0, 0)
            couleur('noir')

3 rosaces

def rosace(rayon=100):
                for i in range(6):
                    couleur()
                    cercle(rayon)
                    tg(60)
            
            rosace()
            rosace(50)
            rosace(25)
            couleur("noir")

10 carrés

def carre(c) :
                for i in range(4) :
                    av(c)
                    tg(90)
            
            for i in range(10) :
                vaEn(10*i-200, 10*i-200)
                couleur()
                carre((10-i)*30)
            
            vaEn(-50, 150)
            couleur("bleu")
            ecris("Voilà c'est fait", 20)
            vaEn(-50, 200)

Vasarely

d'après http://www.prpig.org/2014/08/victor-vasarely-meets-tina-turtle.html

def carre(debut=(0, 0), cote=100):
                # un carré plein
                va(debut[0], debut[1])
                turtle.begin_fill()
                for i in range(4):
                    av(cote)
                    tg(90)
                turtle.end_fill()
            
            # nombre de carrés :
            nb = 8
            # leur taille :
            taille = 40
            
            moitie = (nb + 1) / 2
            position = [-moitie * taille, moitie * taille]
            va(position[0], position[1])
            
            for x in range(nb):
                for y in range(nb):
                    couleur()
                    carre(position, taille)
                    couleur()
                    carre(
                        (position[0] + taille/4, position[1] + taille/4), 
                        taille/2)
                    position[0] += taille
                    va(position[0], position[1])
                position[0] = -moitie * taille
                position[1] -= taille
                va(position[0], position[1])
            
            position[0] -= taille
            va(position[0], position[1])
            ecris("Alphabet Plastique, de Victor VASARELY.", 20)
            position[1] -= taille
            va(position[0], position[1])


Fonctionnement de TorPy

Au lancement de TorPy, un sous-dossier torpy est créé dans le dossier temporaire de l'ordinateur et 3 fichiers y sont copiés depuis le sous-dossier files de l'installation de TorPy :

Lorsque l'utilisateur demande l'exécution de ses instructions, celles-ci sont insérées dans le fichier torpy.py avant qu'il ne soit exécuté.
Plus précisément, le fichier torpy.py contient la ligne suivante qui sert de repère et sera remplacée par les instructions de l'utilisateur :

# USER INSTRUCTIONS

Adapter TorPy

En exemple, je vais ajouter les fonctions begin_fill et end_fill du module turtle, en les traduisant en debutDeRemplissage et finDeRemplissage, avec des versions courtes remplir et finRemplir.

Modifications du fichier files/importturtle_fr.py

Modifications du fichier translations/instructions_fr

Remarques


Traduire TorPy dans une autre langue

La langue est détectée au lancement mais peut aussi être passée en paramètre.
Par exemple si TORPY_DIR désigne le chemin d'installation de TorPy :

python TORPY_DIR/torpy.pyw LANG=es
            python TORPY_DIR/torpy.pyw LANG=fr_CA

La langue est indiquée sous la forme xx ou xx_YY.
Par exemple fr indiquera le français, mais fr_CA le français du Québec.

Si vous traduisez TorPy dans une autre langue, faites moi parvenir (pascal.peter at free.fr) votre traduction afin qu'elle puisse être ajoutée au logiciel. Les fichiers à m'envoyer sont les suivants (voir plus bas pour leur description) :

Traduction des fonctions et des instructions

Il suffit de modifier les 2 fichiers textes suivants et de les enregistrer en ajoutant la terminaison xx ou xx_YY :

Par exemple, j'ai créé une variante de la langue française baptisée fr_LOL.
Dans les fichiers importturtle_fr_LOL.py et instructions_fr_LOL, j'ai juste remplacé avance par avanssss et ecris par ekri.

Remarque : depuis Python 3 les noms de fonctions (et de variables) peuvent être accentués.
Cela reste à éviter car TorPy ne fonctionnerait plus avec Python 2.
Cependant, pour certaines langues cette possibilité peut s'avérer fort utile.

Traduction de l'interface de TorPy (menus, etc)

Il suffit de modifier le fichier texte suivant et de l'enregistrer en ajoutant la terminaison xx ou xx_YY :

Le fichier peut être modifié avec Qt Linguist, qui vous permettra aussi de générer un fichier torpy_xx_YY.qm et de tester votre traduction. Pour cela, demandez File → Release dans Qt Linguist.

Voici le résultat en lançant TorPy avec le paramètre LANG=fr_LOL :

Éventuellement, traduction des fichiers README et CREDITS

Ils sont affichés dans la fenêtre À propos