![](https://i.imgur.com/NCicOVtt.png)
Nous nous attardons aujourd'hui plus en détail sur les ajouts apportés au module Python turtle.
1) Exploration turtle
Go to top![](https://i.imgur.com/BbZN7X9t.png)
Nous avions pour référence jusqu'à présent 38 à 60 éléments en comptant les sous-éléments.
- Code: Select all
def getplatform():
id=-1
try:
import sys
try:
if sys.platform=='nspire':id=0
if sys.platform.startswith('TI-Python') or sys.platform=='Atmel SAMD21':id=4
except:id=3
except:
try:
import kandinsky
id=1
except:
try:
if chr(256)==chr(0):id=5+(not ("HP" in version()))
except:
id=2
return id
platform=getplatform()
#lines shown on screen
#plines=[29,12, 7, 9,11,0,0]
plines=[29,16, 7, 9,11,0,0]
#max chars per line
#(error or CR if exceeded)
pcols =[53,99,509,32,32,0,0]
unsafe = ((), (), (), ('sys.argv', 'sys.path'), (), (), ())
if platform>=0:
curline=0
_p = print
nlines=plines[platform]
ncols=pcols[platform]
def print(*ls):
global curline
st=""
for s in ls:
if not(isinstance(s,str)):
s=str(s)
st=st+s
stlines=1+int(len(st)/ncols)
if curline+stlines>=nlines:
input("Input to continue:")
curline=0
_p(st)
curline+=stlines
def sstr(obj):
try:
s=obj.__name__
except:
s=str(obj)
a=s.find("'")
b=s.rfind("'")
if a>=0 and b!=a:
s=s[a+1:b]
return s
def isExplorable(obj):
for k in done:
try:
if isinstance(obj, eval(k)):
t, done[k] = done[k], True
return not t
except: pass
if str(obj).startswith("<module"): return False
l = ()
try: l = dir(obj)
except: pass
return len(l)
done = {'str':False, 'list':False, 'tuple':False, 'dict':False, 'complex':False, 'set':False, 'frozenset': False}
def explmod(pitm, pitmsl=[], reset=True):
global curline
spitm=sstr(pitm)
if(reset):
curline=0
pitmsl=[spitm]
for k in done: done[k] = False
hd="."*(len(pitmsl)-1)
c,c2=0,0
l = sorted(dir(pitm))
for i in range(len(l)):
l[i] = (l[i], getattr(pitm, l[i]))
try:
if not isinstanceof(pitm, str):
for i in range(len(pitm)):
l.append((spitm+'['+str(i)+']',pitm[i]))
except: pass
for itm in l:
c,c2=c+1,c2+1
isUnsafe = platform >= 0 and '.'.join(pitmsl + [itm[0]]) in unsafe[platform]
try:
if isUnsafe: raise Exception
print(hd+itm[0]+"="+str(itm[1]))
except:
print(hd+itm[0])
if not isUnsafe and isExplorable(itm[1]) and itm[1] != pitm and itm[0] not in pitmsl:
pitmsl2=pitmsl.copy()
pitmsl2.append(itm[0])
c2=c2+explmod(itm[1], pitmsl2, False)[1]
if c>0 and reset:
print(hd+"Total: "+str(c)+" 1st level item(s)")
if c2>0 and c2!=c:
print(hd+" "+str(c2)+" item(s)")
return [c,c2]
- fonction colormode()
- fonction write()
Nous allons bien évidemment en expliciter l'intérêt, mais en attendant petit bilan au sujet de la richesse des différentes solutions Python sur calculatrices :
Casio Graph 35+E II 90+E | NumWorks | TI-83PCE Ed. Python | ||
builtins array collections cmath gc math matplotlib matplotlib.pyplot micropython os random sys time turtle uerrno | 84-197 . . . . 25-47 . . . . 8-30 . . . . | 97-1581 3-363 . 13-428 9-404 42-602 . . 10-410 . . 17-977 . . 25-1277 | 89-211 . . 12-34 . 41-63 3-25 11-33 6-28 . 9-31 . 3-25 40-62 . | 92-211 2-24 2-24 . 7-29 28-50 . . . . 8-30 15-93 4-26 . . |
spécifique | casioplot:6-28 | prime:3-368 | ion:48-162 kandinsky:8-30 | ti_graphics:30-75 ti_hub:? ti_plotlib:49-84 ti_system:12-34 ti_rover:66-92 |
Modules | 4 | 9 | 11 | 13 |
Eléments | 123-302 | 219-6042 | 269-703 | 315-772 |
- 315-772 éléments : TI-83 Premium CE Edition Python
- 269-703 éléments : NumWorks
- 219-6042 éléments : HP Prime (version alpha)
- 123-302 éléments : Casio Graph 90+E / 35+E II
Casio Graph 35+E II 90+E | CasioPython Casio Graph 35+E II 35+E/USB 75/85/95 | MicroPython TI-Nspire | TI-Python | TI-83PCE Ed. Python | ||
builtins array collections cmath gc math matplotlib matplotlib.pyplot micropython os random sys time turtle uerrno | 84-197 . . . . 25-47 . . . . 8-30 . . 69-126 . | 91-230 2-28 . 12-38 7-33 41-67 . . 6-32 . 8-34 12-38 . . 24-108 | 93-218 2-28 . 12-38 7-33 41-67 . . 3-29 . . 15-86 . . . | 92-212 2-24 2-24 . 7-29 28-50 . . . . 8-30 15-93 4-26 . . | 93-214 2-25 2-25 12-35 7-30 41-64 . . 6-29 15-38 8-31 15-99 8-33 . . | 92-211 2-24 2-24 . 7-29 28-50 . . . . 8-30 15-93 4-26 . . |
spécifique | casioplot:6-28 matplotl:25-68 | nsp:3-10 | board:22 storage:7-47 | ce_box:5-32 ce_chart:8-67 ce_quivr:5-41 ce_turtl:? ti_graphics:30-75 ti_hub:? ti_plotlib:49-84 ti_system:12-34 ti_rover:66-92 | ||
Modules | 6 | 9 | 8 | 9 | 13 | 17 |
Eléments | 217-496 | 203-608 | 176-509 | 158-488 | 238-692 | 333-912 |
- 322-912 éléments : TI-83 Premium CE Edition Python
- 269-703 éléments : NumWorks
- 238-692 éléments : TI-83 Premium CE + TI-Python (firmware tiers)
- 219-6042 éléments : HP Prime (version alpha)
- 217-496 éléments : Casio Graph 90+E / 35+E II / fx-CG50 / fx-9750/9860GIII
- 203-608 éléments : Casio Graph 75/85/95 / 35+E/USB / 35+E II / fx-9750GII/GIII / fx-9860G/GII/GIII (appli CasioPython)
- 176-509 éléments : TI-Nspire (appli MicroPython)
- 158-488 éléments : TI-83 Premium CE + TI-Python
NumWorks conforte ainsi sa 2nde place niveau richesse de sa solution Python.
Mais la richesse ne fait pas tout, il faut également voir la compatibilité, et nous y venons de suite.
2) compatibilité turtle
Go to topGraph 35+E II | Graph 90+E | NumWorks | ordi |
![]() | ![]() | ![]() | ![]() |
|
La tortue travaillant en pixels, le code aurait besoin d'être adapté pour l'écran Graph 35+E II à plus faible définition. Mais à part cela, le code passe ici sans problème sur Casio, NumWorks et ordinateur.
![:) :)](./images/smilies/smile.png)
Graph 35+E II | Graph 90+E | NumWorks | ordi |
![]() | ![]() | ![]() | ![]() |
|
Ici pareil, compatibilité totale !
![:) :)](./images/smilies/smile.png)
![](https://i.imgur.com/QD3eLV8t.png)
- Code: Select all
from math import exp
from turtle import *
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))
pencolor([red, green, blue])
for i in range(1, 5):
forward(60)
right(90)
right(10)
Problème ici sur NumWorks, qui a fait le choix de ne pas utiliser le même système de coordonnées que le standard pour les composantes de couleurs RVB :
- nombres flottants de 0.0 à 1.0 sur Casio et ordinateur
- nombres entiers de 0 à 255 sur NumWorks et TI-83 Premium CE Edition Python
colormode(1.)
à tout script compatible Casio ou ordinateur pour le rendre également fonctionnel sur NumWorks ! ![Bien joué! :bj:](./images/smilies/sg3agbjg3ag.gif)
Par contre, chez Casio cette fonction certes inutile ici n'est pas présente. Il nous faut donc sécuriser son appel en interceptant toute erreur éventuelle.
Graph 35+E II | Graph 90+E | NumWorks | ordi |
![]() | ![]() | ![]() | ![]() |
|
Graph 35+E II | Graph 90+E | NumWorks | ordi |
![]() | ![]() | ![]() | ![]() |
|
Sous réserve de cette toute petite astuce donc, compatibilité totale.
![:) :)](./images/smilies/smile.png)
Graph 35+E II | Graph 90+E | NumWorks | ordi |
![]() | ![]() | ![]() | ![]() |
|
Les réglages d'épaisseur du crayon via pensize() semblent hélas totalement ignorés chez Casio.
![](https://i.imgur.com/5I4YiQSt.png)
Cette fonction standard n'était jusqu'à présent pas disponible dans le module turtle de NumWorks.
Mais maintenant c'est le cas alors voyons ce que ça donne :
Graph 35+E II | Graph 90+E | NumWorks | ordi |
![]() | ![]() | ![]() | |
|
Petit écart chez Casio, avec le texte qui est écrit en prenant la position de la tortue comme coin supérieur gauche, alors que le standard la prend comme coin inférieur gauche.
![](https://i.imgur.com/H8oZSVat.png)
Il suffisait pour cela de passer un rayon négatif à la fonction circle(), ce qui n'était hélas pas géré chez NumWorks et ignoré.
Mais maintenant apparemment désormais c'est bon :
![Bien joué! :bj:](./images/smilies/sg3agbjg3ag.gif)
Graph 35+E II | Graph 90+E | NumWorks | ordi |
![]() | ![]() | ![]() | |
|
Graph 35+E II | Graph 90+E | Num Works | ordi |
![]() | ![]() | ![]() | ![]() |
|
Conclusion
Go to topNous obtenons ainsi sur la NumWorks version 14 un module turtle en excellente adéquation avec le standard et bénéficiant ainsi d'une non moins excellente compatibilité avec les scripts conçus pour le standard ou pour les plateformes visant à le respecter.
Une compatibilité peut-être un poil meilleure que celle de Casio.
Mais bref dans les deux cas, nous avons donc d'excellentes solutions qui permettront de concevoir et exécuter des scripts Python turtle dans une classe équipée de différents modèles avec un effort très minimal !
![Bien joué! :bj:](./images/smilies/sg3agbjg3ag.gif)
Liens :
- inscription bêta-test NumWorks
- mise à jour NumWorks (à accéder après inscription)