A la rentrée 2019 le Python sera le seul langage de programmation préconisé pour l'enseignement de l'algorithmique au lycée en Seconde et Première.
Plusieurs calculatrices graphiques intègrent déjà une implémentation Python officielle dans leur dernière mise à jour, plus ou moins complète, fidèle et réussie selon le cas :
Ces diverses implémentations ne sont pas équivalentes et diffèrent dans l'éventail de modules qu'elles proposent.
Aussi comme nous l'avons déjà vu, ces implémentations diffèrent également par le contenu proposé dans chaque module.
Nous avons en effet déjà comparé les modules builtins, math, random, time et cmath.
Voici un petit récapitulatif des modules disponibles sur chaque implémentation avec le nombre d'entrées offertes à chaque fois :
D'où à date le classement suivant :
Plusieurs calculatrices graphiques intègrent déjà une implémentation Python officielle dans leur dernière mise à jour, plus ou moins complète, fidèle et réussie selon le cas :
- NumWorks avec MicroPython 1.9.4
- Casio Graph 90+E avec MicroPython 1.9.4
- HP Prime avec l'écriture Python de Xcas
- le module externe TI-Python pour TI-83 Premium CE avec CircuitPython (dérivé de MicroPython)
- TI-Nspire avec MicroPython 1.4.6
- Casio Graph 90+E avec l'écriture Python de KhiCAS
- Casio Graph 35+E/75+E avec MicroPython 1.9.4
Ces diverses implémentations ne sont pas équivalentes et diffèrent dans l'éventail de modules qu'elles proposent.
Aussi comme nous l'avons déjà vu, ces implémentations diffèrent également par le contenu proposé dans chaque module.
Nous avons en effet déjà comparé les modules builtins, math, random, time et cmath.
Voici un petit récapitulatif des modules disponibles sur chaque implémentation avec le nombre d'entrées offertes à chaque fois :
NumWorks | Casio Graph 90+E | module externe TI-Python pour TI-83 Premium CE | |||
builtins | 218 | 188 | 175 | 204 | 190 |
array | ? | ? | ? | ||
collections | ? | ||||
cmath | 12 | 12 | 12 | ||
gc | ? | ? | ? | ||
math | 41 | 41 | 25 | 41 | 28 |
random | 8 | 8 | 8 | 8 | |
sys | ? | ? | ? | ||
time | 3 | 4 | |||
dessin (spécifique) | ? (nsp) | ? (kandinsky) | |||
Modules | 7 | 6 | 3 | 7 | 8 |
Éléments | 271+ | 252+ | 208 | 265+ | 230+ |
D'où à date le classement suivant :
- TI-Nspire avec 7 modules et plus de 271 entrées
- Casio Graph 35+E/75+E avec 7 modules et plus de 265 entrées
- NumWorks avec 6 modules et plus de 252 entrées
- module externe TI-Python pour TI-83 Premium CE avec 8 modules et plus de 230 entrées
- Casio Graph 90+E avec 3 modules et 208 entrées
Un classement bien évidemment non final, puisque basé sur la comparaison d'une partie des modules.
Aujourd'hui poursuivons avec la comparaison d'un module remarquable, le module sys, disponible uniquement sur les TI-Nspire, Casio Graph 35/75+E et module externe TI-Python.
C'est en effet l'occasion d'arracher quelques secrets supplémentaires au module externe TI-Python...
Pour cela, utilisons le script suivant :
Voici ci-contre ce que répondent les Graph 35/75+E et TI-Nspire, et ci-dessous une reconstitution de ce qu'affiche le module externe TI-Python à partir de nos observations et notes d'octobre 2018 aux journées APMEP et congrès UdPPC :
Bref, récapitulons ce qu'il y a donc dans nos différents modules sys :
C'est en effet l'occasion d'arracher quelques secrets supplémentaires au module externe TI-Python...
Pour cela, utilisons le script suivant :
- Code: Select all
#platforms:
#0: MicroPython / TI-Nspire
#1: MicroPython / NumWorks
#2: MicroPython / G90+E
#3: MicroPython / G35+E/USB / G75/85/95
#4: CircuitPython / TI-Python / 83PCE
#5: Xcas / HP Prime
#6: KhiCAS / Graph 90+E
def getplatform():
id=-1
try:
import sys
try:
if sys.platform=='nspire':id=0
if sys.platform=='TI-Python Adapter':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]
#max chars per line
#(error or CR if exceeded)
pcols =[53,99,509,32,32,0,0]
nlines=plines[platform]
ncols=pcols[platform]
curline=0
def mprint(*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
print(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):
s=str(obj)
return s.startswith("<module '") or s.startswith("<class '")
def explmod(pitm,pitmsl=[],reset=True):
global curline
if(reset):
curline=0
pitmsl=[sstr(pitm)]
hd="."*(len(pitmsl)-1)
spath=".".join(pitmsl)
c=0
for itms in sorted(dir(pitm)):
c=c+1
try:
itm=eval(spath+"."+itms)
mprint(hd+itms+"="+str(itm))
if isExplorable(itm):
pitmsl2=pitmsl.copy()
pitmsl2.append(itms)
c=c+explmod(itm,pitmsl2,False)
except:
mprint(hd+itms)
if c>0:
mprint(hd+"Total: "+str(c)+" item(s)")
return c
Voici ci-contre ce que répondent les Graph 35/75+E et TI-Nspire, et ci-dessous une reconstitution de ce qu'affiche le module externe TI-Python à partir de nos observations et notes d'octobre 2018 aux journées APMEP et congrès UdPPC :
TI-Python wrote:>>> from explmod import *
>>> import sys
>>> explmod(sys)
__name__=sys
argv=[]
byteorder=little
exit=<function>
implementation=(name='circuitpython', version=(3, 0, 0))
maxsize=1073741823
modules={'handshake': <module 'handshake' from 'handshake.py'>}
path=['', '/', '/lib', '.frozen']
platform=TI-Python Adapter
print_exception=<function>
stderr=<io.FileIO 2>
stdin=<io.FileIO 0>
stdout=<io.FileIO 1>
version=3.4.0
version_info=(3, 4, 0)
Comme promis, nous en apprenons davantage sur le module externe TI-Python, notamment que contrairement aux autres calculatrices il n'utilise pas MicroPython mais CircuitPython, une implémentation en fait dérivée de MicroPython et développée par Adafruit.
Il s'agirait apparemment d'un Circuitpython 3.0.0 implémentant du Python 3.4.0.
Après avoir déjà remarqué que le module externe TI-Python utilisait la puce Atmel ATSAMD21, puce notablement connue pour son usage dans les PyBoards (cartes de développement Python) Trinket M0 et Feather M0 justement également conçues par Adafruit, cela commence à faire beaucoup de coincidences...
Le module externe TI-Python ne serait-il pas tout simplement une carte Adafruit Trinket M0 ou Feather M0, avec le port micro-USB remplacé par du mini-USB ?
En tous cas du point de vue logiciel il doit y avoir sans doute un firmware différent, vu que la carte Adafruit Trinket M0 que nous avions apportée au congrès UdPPC 2018 n'était tout simplement pas reconnue par la calculatrice du stand de Texas Instruments.
A part cela, l'on note la possibilité pour un script Python de déterminer très facilement si il tourne sur le module externe TI-Python en testant juste si
Nous remarquons également dans
Il s'agirait apparemment d'un Circuitpython 3.0.0 implémentant du Python 3.4.0.
Après avoir déjà remarqué que le module externe TI-Python utilisait la puce Atmel ATSAMD21, puce notablement connue pour son usage dans les PyBoards (cartes de développement Python) Trinket M0 et Feather M0 justement également conçues par Adafruit, cela commence à faire beaucoup de coincidences...
Le module externe TI-Python ne serait-il pas tout simplement une carte Adafruit Trinket M0 ou Feather M0, avec le port micro-USB remplacé par du mini-USB ?
En tous cas du point de vue logiciel il doit y avoir sans doute un firmware différent, vu que la carte Adafruit Trinket M0 que nous avions apportée au congrès UdPPC 2018 n'était tout simplement pas reconnue par la calculatrice du stand de Texas Instruments.
A part cela, l'on note la possibilité pour un script Python de déterminer très facilement si il tourne sur le module externe TI-Python en testant juste si
platform=='TI-Python Adapter'
.Nous remarquons également dans
sys.path
la mention de plusieurs dossiers du module externe TI-Python : dossier courant, dossier racine /
, dossier /lib
ainsi qu'un .frozen
.sys.modules
révèle la présence d'un mystérieux module handshake provenant du script handshake.py, dans le sens où il n'est pas présent sur la calculatrice du stand de Texas Instruments ! Bref, récapitulons ce qu'il y a donc dans nos différents modules sys :
TI-Nspire | Casio Graph 35+E/USB Graph 75/85/95 | module externe TI-Python pour TI-83 Premium CE |
__name__=sys argv=[] byteorder=little exc_info() exit() implementation=(name='micropython', version=(1, 4, 6)) maxsize=2147483647 . path=['', '/documents/ndless'] platform=nspire print_exception() stderr=<io.TextIOWrapper 2> stdin=<io.TextIOWrapper 0> stdout=<io.TextIOWrapper 1> version=3.4.0 version_info=(3, 4, 0) | __name__=sys argv= byteorder=big . exit() implementation=(name='micropython', version=(1, 9, 4)) maxsize=2147483647 modules={'explmod'} path= . print_exception() . . . version=3.4.0 version_info=(3, 4, 0) | __name__=sys argv=[] byteorder=little . exit() implementation=(name='circuitpython', version=(3, 0, 0)) maxsize=1073741823 modules={'handshake'} path=['', '/', '/lib', '.frozen'] platform=TI-Python Adapter print_exception() stderr=<io.FileIO 2> stdin=<io.FileIO 0> stdout=<io.FileIO 1> version=3.4.0 version_info=(3, 4, 0) |
Total: 15 | Total: 12 | Total: 15 |
Ce qui déjà nous fait remarquer que le Micropython pour TI-Nspire n'est apparemment plus mis à jour depuis des lustres, étant en version 1.4.6 quand toutes les autres calculatrices concernées ont du Micropython 1.9.4.
Notons aussi que
Notons aussi que
sys.maxsize
, taille maximale des listes, chaînes de caractères et autres objets composés, est nettement inférieure sur le module externe TI-Python, un peu moins de la moitié de ce qu'elle vaut sur les autres modèles.Suite à cela, mettons à jour notre petit récapitulatif :
D'où le classement qui ne change toujours pas :
A bientôt...
NumWorks | Casio Graph 90+E | module externe TI-Python pour TI-83 Premium CE | |||
builtins | 218 | 188 | 175 | 204 | 190 |
array | ? | ? | ? | ||
collections | ? | ||||
cmath | 12 | 12 | 12 | ||
gc | ? | ? | ? | ||
math | 41 | 41 | 25 | 41 | 28 |
random | 8 | 8 | 8 | 8 | |
sys | 15 | 12 | 15 | ||
time | 3 | 4 | |||
dessin (spécifique) | ? (nsp) | ? (kandinsky) | |||
Modules | 7 | 6 | 3 | 7 | 8 |
Éléments | 286+ | 252+ | 208 | 277+ | 245+ |
D'où le classement qui ne change toujours pas :
- TI-Nspire avec 7 modules et plus de 286 entrées
- Casio Graph 35+E/75+E avec 7 modules et plus de 277 entrées
- NumWorks avec 6 modules et plus de 252 entrées
- module externe TI-Python pour TI-83 Premium CE avec 8 modules et plus de 245 entrées
- Casio Graph 90+E avec 3 modules et 208 entrées
A bientôt...