Texas Instruments nous sort aujourd'hui à son tour une nouvelle version de
ce_turtl, son module
Python de tracés relatifs à la
turtle pour
TI-83 Premium CE Edition Python et
TI-84 Plus CE-T Python Edition...
... ou pas, car l'appel
ce_turtl.version()
nous indique que nous sommes toujours en version
1.0.
Pas de nouveauté, l'exploration du module à l'aide de notre script
explmod à la recherche d'éléments non listés aux menus donne toujours
65 éléments.
Mais donc, qu'est-ce qui change par rapport à la publication précédente ?
En fait, il s'agit ici d'une version non plus en français mais en anglais, et donc mieux adaptée aux utilisateurs du modèle européen
TI-84 Plus CE-T Python Edition. Bien évidemment cela ne concerne pas les noms de fonctions mais le menu les présentant, avec les onglets ainsi que les indications sur les valeurs de paramètres.
Nous avons fort peu d'espoir, mais regardons quand même si il y a eu des améliorations de la compatibilité avec le module standard
turtle, et comparons cela avec ce que donne la concurrence.
Pour cela, quelques préparatifs. Voici déjà les lignes d'importation à mettre en début de script pour pouvoir profiter d'appels communs entre
ce_turtl et le standard
turtle :
- Code: Select all
try: #TI-83 Premium CE
from ce_turtl import turtle
turtle.clear()
except ImportError:
import turtle
Pour permettre aux scripts qui vont suivre de réaliser quand même des tracés partiels malgré les erreurs, anticipons déjà quelques difficultés.
ce_turtl ne définit pas les méthodes
turtle.colormode() et
turtle.write(), donc prévoyons de quoi ignorer les appels en question :
- Code: Select all
def try_colormode(m):
try: turtle.colormode(m)
except: pass
def try_write(s):
try: turtle.write(s)
except: pass
ce_turtle dispose de la méthode
turtle.color() mais pas de la méthode
turtle.pencolor(). Donc mettons de quoi rediriger les appels :
- Code: Select all
def try_pencolor(c):
try: turtle.pencolor(c)
except: pass
try: turtle.color(c)
except: pass
ce_turtl offre la méthode
turtle.pensize() mais ce n'est pas le cas de
KhiCAS donc prévoyons ici encore une fonction d'appel protégée :
- Code: Select all
def try_pensize(s):
try: turtle.pensize(s)
except: pass
Enfin en fin de script,
ce_turtl nécessitera un appel non standard
turtle.show() afin de figer l'affichage, ce dernier étant en effet effectué dans le même
buffer que celui de la console.
ordi | Graph 90+E Graph 35+E II | NumWorks | | TI-83 Premium CE TI-84 Plus CE |
|
| | | |
- Code: Select all
try: #TI-83 Premium CE from ce_turtl import turtle turtle.clear() except ImportError: import turtle
from math import exp
def try_colormode(m): try: turtle.colormode(m) except: pass def try_pencolor(c): try: turtle.pencolor(c) except: pass try: turtle.color(c) except: pass
try_colormode(1) for i in range(1,37): red = exp(-0.5 * ((i - 6) / 12) ** 2) green = exp(-0.5 * ((i - 18) / 12) ** 2) blue = exp(-0.5 * ((i - 30) / 12) ** 2) try_pencolor([red, green, blue]) for i in range(1, 5): turtle.forward(60) turtle.right(90) turtle.right(10)
try: turtle.show() #TI-83 Premium CE except: pass
|
Premier exemple, et premier problème. Du code
turtle standard ne permet visiblement pas d'exploiter les couleurs dans le contexte du module
ce_turtl.
Le problème vient de la méthode
turtle.color() dont les spécifications ne respectent pas le standard :
- dans le contexte du module turtle standard elle attend un tuple ou une liste avec les valeurs des 3 composantes rouge-vert-bleu
- ici avec ce_turtle elle attend 3 paramètres pour décrire chacune des composantes rouge-vert-bleu
ordi | Graph 90+E Graph 35+E II | NumWorks | | TI-83 Premium CE TI-84 Plus CE |
|
| | | |
- Code: Select all
try: #TI-83 Premium CE from ce_turtl import turtle turtle.clear() except ImportError: import turtle
from math import exp
def try_colormode(m): try: turtle.colormode(m) except: pass def try_pencolor(c): try: turtle.pencolor(c) except: pass try: turtle.color(c) except: pass
try_colormode(1) turtle.penup() turtle.goto(0, -20) turtle.pendown() for i in range(1,37): red = exp(-0.5 * ((i - 6) / 12) ** 2) green = exp(-0.5 * ((i - 18) / 12) ** 2) blue = exp(-0.5 * ((i - 30) / 12) ** 2) try_pencolor([red, green, blue]) turtle.circle(50 - i) turtle.right(10)
try: turtle.show() #TI-83 Premium CE except: pass
|
Là c'est plus embêtant. On demande à la
TI-83 Premium CE Edition Python ou
TI-84 Plus CE-T Python Edition le tracé d'une coquille d'escargot digne d'une oeuvre d'art, et elle nous sort une sorte de crotte en forme de donut, quelle déception...
Le problème vient ici de la méthode
turtle.circle(r) :
- avec module turtle standard le cercle tracé passe par la position de la tortue, ce qui est logique
- ici avec ce_turtle le cercle tracé prend pour centre la position de la tortue
ordi | Graph 90+E Graph 35+E II | NumWorks | | TI-83 Premium CE TI-84 Plus CE |
|
| | | |
- Code: Select all
try: #TI-83 Premium CE from ce_turtl import turtle turtle.clear() except ImportError: import turtle
def try_pencolor(c): try: turtle.pencolor(c) except: pass try: turtle.color(c) except: pass
turtle.forward(40) turtle.backward(100) turtle.left(90) turtle.forward(30) turtle.right(60) turtle.forward(60) turtle.right(30) turtle.forward(30) turtle.penup() turtle.forward(18) turtle.right(90) turtle.forward(60) turtle.pendown() turtle.right(30) turtle.backward(30) turtle.right(60) turtle.forward(60) try_pencolor("red") turtle.penup() turtle.goto(80,40) turtle.right(140) turtle.pendown() turtle.circle(30) turtle.penup() turtle.goto(105,50) try_pencolor("green") turtle.pendown() turtle.circle(-50) turtle.penup() try_pencolor("red") turtle.right(21) turtle.goto(60,20) turtle.pendown() turtle.circle(40,60) turtle.penup() try_pencolor("blue") turtle.goto(-50,15) turtle.setheading(0) turtle.pendown() turtle.write("CASIO")
try: turtle.show() #TI-83 Premium CE except: pass
|
Cela ne semble ici pas tourner bien rond chez
KhiCAS. Ce n'est certes pas le propos d'aujourd'hui, mais nous pouvons remarquer que la tortue semble se positionner initialement positionnée aux coordonnées
(100; 0) et non pas
(0; 0).
En tous cas sur
TI-83 Premium CE Edition Python et
TI-84 Plus CE-T Python Edition avec
ce_turtle c'est pire, une erreur se déclenche et nous n'obtenons donc aucun tracé.
Le problème vient encore de la méthode
turtle.circle() qui n'accepte pas ici l'angle de l'arc à tracer en 2
ème paramètre.
ordi | Graph 90+E Graph 35+E II | NumWorks | | TI-83 Premium CE TI-84 Plus CE |
|
| | | |
- Code: Select all
try: # TI-83 Premium CE from ce_turtl import * turtle.clear() except ImportError: import turtle
def try_colormode(m): try: turtle.colormode(m) except: pass def try_pencolor(c): try: turtle.pencolor(c) except: pass try: turtle.color(c) except: pass def try_pensize(s): try: turtle.pensize(s) except: pass
def koch(n, l): if n<=0: turtle.forward(l) else: koch(n-1, l/3) turtle.left(60) koch(n-1, l/3) turtle.right(120) koch(n-1, l/3) turtle.left(60) koch(n-1, l/3)
def flock(n, l): koch(n, l) turtle.right(120) koch(n, l) turtle.right(120) koch(n, l)
try_colormode(1) l=80 turtle.penup() turtle.goto(105,3) turtle.left(120) turtle.pendown() try_pencolor((0, 0, 0)) flock(3, l) turtle.left(120)
turtle.penup() turtle.goto(105,-10) turtle.right(60) turtle.pendown() try_pencolor((1, .5, 0)) flock(4, l) turtle.right(60)
try_pensize(2) turtle.penup() turtle.goto(5,45) turtle.right(60) turtle.pendown() try_pencolor((0, 0, 1)) flock(2, l) turtle.right(60)
turtle.penup() turtle.goto(-100,17) turtle.left(120) turtle.pendown() try_pencolor((1, 0, 0)) flock(0, l) turtle.left(120)
try_pensize(3) turtle.penup() turtle.goto(-100,-5) turtle.right(60) turtle.pendown() try_pencolor((0, 1, 0)) flock(1, l) turtle.right(60)
turtle.penup() turtle.forward(400)
try: turtle.show() #TI-83 Premium CE except: pass
|
Bon outre le problème de couleur déjà évoqué, avec
ce_turtl quelque chose semble également ne pas aller avec l'épaisseur du tracé, trop importante par rapport à la concurrence et au standard.
Tentons de mieux comprendre le fonctionnement de
turtle.pensize() à l'aide d'un exemple dédié.
ordi | Graph 90+E Graph 35+E II | NumWorks | | TI-83 Premium CE TI-84 Plus CE |
|
| | | |
- Code: Select all
try: # TI-83 Premium CE from ce_turtl import * turtle.clear() except ImportError: import turtle
def try_write(s): try: turtle.write(s) except: pass
def try_pensize(s): try: turtle.pensize(s) except: pass
def test(w, n): turtle.penup() turtle.goto(- w / 2, 0) turtle.pendown()
for k in range(n): try_pensize(k) try_write(str(k)) turtle.forward(w / n)
#test(384, 8) # Graph 90+E #test(128, 8) # Graph 35+E II test(320, 8)
try: turtle.show() #TI-83 Premium CE except: pass
|
Dans le module
turtle standard, le paramètre passé à
turtle.pensize() est l'épaisseur du tracé en pixels.
En fait, cela ne va chez personne si l'on compare les épaisseurs obtenues en fonction de la valeur du paramètre :
| ordi | Graph 90+E Graph 35+E II | NumWorks | TI-83 Premium CE TI-84 Plus CE |
0 | 1 | 1 | 0 | 1 |
1 | 1 | 1 | 1 | 3 |
2 | 2 | 3 | 2 | 5 |
3 | 3 | 3 | 3 | 7 |
4 | 4 | 5 | 4 | 7 |
5 | 5 | 5 | 5 | 7 |
6 | 6 | 5 | 6 | 7 |
7 | 7 | 5 | 7 | 7 |
Score | 100% | 50% | 87,5% | 25% |
Il n'empêche que clairement, c'est de loin sur
TI-83 Premium CE Edition Python et
TI-84 Plus CE-T Python Edition que le fonctionnement de
turtle.pensize() s'éloigne le plus du standard.
Le module
turtle n'est certes pas au programme du lycée mais n'en reste pas moins important en Seconde. Il peut servir à s'appuyer sur les acquis de
Scratch du collège pour passer progressivement au
Python, particulièrement en
Physique-Chimie où la réalisation de tracés est au programme.
Pour une raison fort étrange et que nous ne comprenons pas,
Texas Instruments a choisi pour son
ce_turtl d'utiliser les mêmes noms que le module
turtle standard, mais n'en a ensuite absolument pas respecté le fonctionnement. Nous avons de
(trop) nombreux écarts dans les paramètres attendus par ces fonctions ou même leur fonctionnement.
Sur les exemples que nous avons déroulés ci-dessus, l'argument de devoir faire des écarts pour que la solution tourne sur le matériel assez limité des
TI-83 Premium CE Edition Python et
TI-84 Plus CE-T Python Edition ne nous semble pas recevable, les corrections à apporter étant pour la plupart tout sauf complexes.
Non non, clairement le respect du standard
turtle préexistant, celui mis en avant aux concours de recrutement des enseignants, dans les livres ainsi que dans les documents ressources, n'était pas au cahier des charges du constructeur ou alors en très mauvaise position.
Dans le contexte
turtle, il ne sera ici pas possible de faire des allers-retours entre la calculatrice et l'ordinateur-tablette, à moins d'un soin méticuleux de la part de l'enseignant dans la conception des scripts et des diverses astuces de compatibilité dans le genre de celles que nous avons utilisées.
A cause de ce gros défaut, en dehors des enseignants
T3 nous doutons très fortement que de nombreux enseignants français veuillent s'embêter à se taper ainsi double travail pour enseigner et faire utiliser le
ce_turtl non standard de la
TI-83 Premium CE Edition Python.