Cet article au sujet du module TI-Python est rédigé a posteriori et illustré à l’aide des photos de tests prises sur le stand de Texas Instruments aux journées APMEP 2018 puis congrès UdPPC 2018. Nous ne disposons pas à ce jour du module.
Certaines photos ne correspondront pas exactement à ce qui est décrit, car nous avons amélioré le script utilisé entre les deux événements. Or malheureusement, il était beaucoup plus compliqué de prendre de bonnes photos au congrès UdPPC de par l'affluence nettement supérieure, le fait que seulement un module au lieu de deux était disponibles sur le stand pour tous ces visiteurs, ainsi que le fait que les stands ne disposaient cette fois-ci pas de cloisons à la différence mais consistaient en de simples tables alignées le long d'une allée et bien remplies - pas vraiment d'espace pour se poser.
Dans tous les cas, notez que ces tests ont été réalisés sur un prototype non final, et que des choses évoquées peuvent changer d'ici la livraison, en bien ou en mal d’ailleurs.
En vous priant donc de bien vouloir excuser les imprécisions éventuelles.
Certaines photos ne correspondront pas exactement à ce qui est décrit, car nous avons amélioré le script utilisé entre les deux événements. Or malheureusement, il était beaucoup plus compliqué de prendre de bonnes photos au congrès UdPPC de par l'affluence nettement supérieure, le fait que seulement un module au lieu de deux était disponibles sur le stand pour tous ces visiteurs, ainsi que le fait que les stands ne disposaient cette fois-ci pas de cloisons à la différence mais consistaient en de simples tables alignées le long d'une allée et bien remplies - pas vraiment d'espace pour se poser.
Dans tous les cas, notez que ces tests ont été réalisés sur un prototype non final, et que des choses évoquées peuvent changer d'ici la livraison, en bien ou en mal d’ailleurs.
En vous priant donc de bien vouloir excuser les imprécisions éventuelles.
Dans un article précédent nous t'avons présenté le TI-Python, module externe permettant l'exécution de scripts Python sur ta TI-83 Premium CE.
Et peut-être as-tu été déçu(e) que le catalogue alphabétique accessible via
2nde
0ne contienne apparemment que 95 éléments, surtout que parmi ces éléments sont inclus ceux des deux modules intégrés math et random. A priori très décevant par rapport à la concurrence...
Et bien non, en fait chez Texas Instruments le catalogue est très loin de tout lister. Par exemple, la commande
try:
fonctionne alors qu'elle n'est pas au catalogue.Comment donc faire pour savoir ce que vaut vraiment le module TI-Python ?
Tentons d'explorer le module builtins à l'aide du script suivant :
- Code: Select all
#platforms: (0)TI-Nspire (1)NumWorks (2)Graph 90+E (3)Graph 75+E (4)TI-Python
plines=[29,12, 7, 9,11]
pcols =[53,99,509,32,32]
try:
import sys
try:
if sys.platform=='nspire': platform=0
if sys.platform=='TI-Python Adapter': platform=4
except: platform=3
except:
try:
import kandinsky
platform=1
except:
platform=2
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 explmod(obj,hd="",obs="",reset=True):
global curline
if(reset): curline=0
c=0
for itm in sorted(dir(obj)):
c=c+1
try:
if obs=="":
try:
obs=obj.__name__
except:
obs=str(obj)
obs=obs[obs.find("'")+1:obs.rfind("'")]
its=obs+"."+str(itm)
itv=eval(its)
mprint(hd+str(itm)+"="+str(itv))
if itv!=obj:
c=c+explmod(itv,hd+".",its,False)
except:
mprint(hd+str(itm))
if c>0:
mprint(hd+"Total: "+str(c)+" item(s)")
return c
Le script nous liste alors pas moins de 212 entrées retranscrites ci-dessous :
TI-Python wrote:>>> from explmod import *
>>> import builtins
>>> explmod(builtins)
ArithmeticError=<class 'ArithmeticError'>
AssertionError=<class 'AssertionError'>
AttributeError=<class 'AttributeError'>
BaseException=<class 'BaseException'>
.__init__=<function>
.Total: 1 item(s)
EOFError=<class 'EOFError'>
Ellipsis=Ellipsis
Exception=<class 'Exception'>
GeneratorExit=<class 'GeneratorExit'>
ImportError=<class 'ImportError'>
IndentationError=<class 'IndentationError'>
IndexError=<class 'IndexError'>
KeyError=<class 'KeyError'>
KeyboardInterrupt=<class 'KeyboardInterrupt'>
LookupError=<class 'LookupError'>
MemoryError=<class 'MemoryError'>
NameError=<class 'NameError'>
NotImplementedError=<class 'NotImplementedError'>
OSError=<class 'OSError'>
OverflowError=<class 'OverflowError'>
ReloadException=<class 'ReloadException'>
RuntimeError=<class 'RuntimeError'>
StopIteration=<class 'StopIteration'>
SyntaxError=<class 'SyntaxError'>
SystemExit=<class 'SystemExit'>
TypeError=<class 'TypeError'>
UnicodeError=<class 'UnicodeError'>
ValueError=<class 'ValueError'>
ZeroDivisionError=<class 'ZeroDivisionError'>
__build_class__=<function>
__import__=<function>
__name__=builtins
.count=<bound_method>
.endswith=<bound_method>
.find=<bound_method>
.format=<bound_method>
.index=<bound_method>
.isalpha=<bound_method>
.isdigit=<bound_method>
.islower=<bound_method>
.isspace=<bound_method>
.isupper=<bound_method>
.join=<bound_method>
.lower=<bound_method>
.lstrip=<bound_method>
.replace=<bound_method>
.rfind=<bound_method>
.rindex=<bound_method>
.rsplit=<bound_method>
.rstrip=<bound_method>
.split=<bound_method>
.startswith=<bound_method>
.strip=<bound_method>
.upper=<bound_method>
.Total: 22 item(s)
__repl_print__=<function>
abs=<function>
all=<function>
any=<function>
bin=<function>
bool=<class 'bool'>
bytearray=<class 'bytearray'>
.append=<function>
.extend=<function>
.Total: 2 item(s)
bytes=<class 'bytes'>
.count=<function>
.endswith=<function>
.find=<function>
.format=<function>
.index=<function>
.isalpha=<function>
.isdigit=<function>
.islower=<function>
.isspace=<function>
.isupper=<function>
.join=<function>
.lower=<function>
.lstrip=<function>
.replace=<function>
.rfind=<function>
.rindex=<function>
.rsplit=<function>
.rstrip=<function>
.split=<function>
.startswith=<function>
.strip=<function>
.upper=<function>
.Total: 22 item(s)
callable=<function>
classmethod=<class 'classmethod'>
dict=<class 'dict'>
.__delitem__=<function>
.__getitem__=<function>
.__setitem__=<function>
.clear=<function>
.copy=<function>
.fromkeys=<bound_method>
.get=<function>
.item=<function>
.keys=<function>
.pop=<function>
.popitem=<function>
.setdefault=<function>
.update=<function>
.values=<function>
.Total: 14 item(s)
dir=<function>
divmod=<function>
enumerate=<class 'enumerate'>
eval=<function>
exec=<function>
filter=<class 'filter'>
float=<class 'float'>
getattr=<function>
globals=<function>
hasattr=<function>
hash=<function>
help=<function>
help=<function>
hex=<function>
id=<function>
input=<function>
input=<function>
int=<class 'int'>
.from_bytes=<bound_method>
.to_bytes=<function>
.Total: 2 item(s)
isinstance=<function>
issubclass=<function>
iter=<function>
len=<function>
list=<class 'list'>
.append=<function>
.clear=<function>
.copy=<function>
.count=<function>
.extend=<function>
.index=<function>
.insert=<function>
.pop=<function>
.remove=<function>
.reverse=<function>
.sort=<function>
.Total: 11 item(s)
locals=<function>
max=<function>
memoryview=<class 'memoryview'>
min=<function>
next=<function>
object=<class 'object'>
oct=<function>
open=<function>
ord=<function>
pow=<function>
print=<function>
property=<class 'property'>
.__deleter__=<function>
.__getter__=<function>
.__setter__=<function>
.Total: 3 item(s)
range=<class 'range'>
repr=<function>
round=<function>
set=<class 'set'>
.__contains__=<function>
.__add__=<function>
.__clear__=<function>
.__copy__=<function>
.__difference__=<function>
.__difference_update__=<function>
.__discard__=<function>
.__intersection__=<function>
.__intersection_update__=<function>
.__isdisjoint__=<function>
.__issubset__=<function>
.__issuperset__=<function>
.__pop__=<function>
.__remove__=<function>
.__symetric_difference__=<function>
.__symetric_difference_update__=<function>
.__union__=<function>
.__update__=<function>
.Total: 18 item(s)
setattr=<function>
slice=<class 'slice'>
sorted=<function>
staticmethod=<class 'staticmethod'>
str=<class 'str'>
.count=<function>
.endswith=<function>
.find=<function>
.format=<function>
.index=<function>
.isalpha=<function>
.isdigit=<function>
.islower=<function>
.isspace=<function>
.isupper=<function>
.join=<function>
.lower=<function>
.lstrip=<function>
.replace=<function>
.rfind=<function>
.rindex=<function>
.rsplit=<function>
.rstrip=<function>
.split=<function>
.startswith=<function>
.strip=<function>
.upper=<function>
.Total: 22 item(s)
sum=<function>
super=<class 'super'>
tuple=<class 'tuple'>
.count=<function>
.index=<function>
.Total: 2 item(s)
type=<class 'type'>
zip=<class 'zip'>
Total: 212 item(s)
212
>>>
Tout ça c'est bien joli, mais qu'est-ce que ça donne par rapport à la concurrence ?
Et bien voilà, nous avons lancé le même script sur les autres calculatrices disposant du Python à ce jour :
Casio Graph 90+E | NumWorks | TI-Python pour TI-83 Premium CE | ||
ArithmeticError AssertionError AttributeError BaseException EOFError Ellipsis Exception GeneratorExit ImportError IndentationError IndexError KeyError KeyboardInterrupt LookupError MemoryError NameError NotImplemented OSError OverflowError RuntimeError StopIteration SyntaxError SystemExit TypeError UnicodeError ValueError ViperTypeError ZeroDivisionError __build_class__() __import__() __repl_print__() abs() all() any() bin() bool bytearray bytes callable() chr() classmethod compile() complex dict dir() divmod() enumerate eval() exec() filter float frozenset getattr() globals() hasattr() hash() hex() id() input() int isinstance() issubclass() iter() len() list locals() map max() memoryview min() next() object oct() open() ord() pow() print() property range repr() reversed round() set setattr() sorted() staticmethod str sum() super tuple type zip | ArithmeticError AssertionError AttributeError BaseException EOFError Ellipsis Exception GeneratorExit ImportError IndentationError IndexError KeyError KeyboardInterrupt LookupError MemoryError NameError NotImplementedError OSError OverflowError RuntimeError StopIteration SyntaxError SystemExit TypeError ValueError ZeroDivisionError __build_class__() __import__() __name__='builtins' __repl_print__() abs() all() any() bin() bool bytes callable() chr() classmethod complex dict dir() divmod() eval() exec() float getattr() globals() hasattr() hash() hex() id() input() int isinstance() issubclass() iter() len() list locals() map max() min() next() object oct() open() ord() pow() print() range repr() round() set setattr() slice sorted() staticmethod str sum() super tuple type zip | ArithmeticError AssertionError AttributeError BaseException EOFError Ellipsis Exception GeneratorExit ImportError IndentationError IndexError KeyError KeyboardInterrupt LookupError MemoryError NameError NotImplementedError OSError OverflowError RuntimeError StopIteration SyntaxError SystemExit TypeError ValueError ZeroDivisionError __build_class__() __import__() __name__='builtins' __repl_print__() abs() all() any() bin() bool bytearray bytes callable() chr() classmethod complex dict dir() divmod() enumerate eval() exec() filter float frozenset getattr() globals() hasattr() hash() hex() id() input() int isinstance() issubclass() iter() len() list locals() map max() memoryview min() next() object oct() open() ord() pow() print() property range repr() reversed round() set setattr() slice sorted() staticmethod str sum() super tuple type zip | ArithmeticError AssertionError AttributeError BaseException EOFError Ellipsis Exception GeneratorExit ImportError IndentationError IndexError KeyError KeyboardInterrupt LookupError MemoryError NameError NotImplementedError OSError OverflowError RuntimeError StopIteration SyntaxError SystemExit TypeError ValueError ZeroDivisionError __build_class__() __import__() __name__='builtins' __repl_print__() abs() all() any() bin() bool bytes callable() chr() classmethod complex dict dir() divmod() enumerate eval() exec() filter float frozenset getattr() globals() hasattr() hash() hex() id() input() int isinstance() issubclass() iter() len() list locals() map max() min() next() object oct() open() ord() pow() print() range repr() reversed round() set setattr() slice sorted() staticmethod str sum() super tuple type zip | ArithmeticError AssertionError AttributeError BaseException EOFError Ellipsis Exception GeneratorExit ImportError IndentationError IndexError KeyError KeyboardInterrupt LookupError MemoryError NameError NotImplementedError OSError OverflowError ReloadException RuntimeError StopIteration SyntaxError SystemExit TypeError UnicodeError ValueError ZeroDivisionError __build_class__() __import__() __name__='builtins' __repl_print__() abs() all() bin() bool bytearray bytes callable() chr() classmethod dict dir() divmod() enumerate eval() exec() filter float getattr() globals() hasattr() hash() help() hex() id() input() int isinstance() issubclass() iter() len() list locals() map max() memoryview min() next() object oct() open() ord() pow() print() property range repr() round() set setattr() slice sorted() staticmethod str sum() super tuple type zip |
Total: 218 | Total: 197 | Total: 218 | Total: 210 | Total: 212 |
D'où le classement suivant :
- TI-Nspire et Casio Graph 35+E/75+E avec 218 entrées
- module TI-Python pour TI-83 Premium CE avec 212 entrées
- NumWorks avec 210 entrées
- Casio Graph 90+E avec 197 entrées
Avec pas moins de 212 éléments présents à ce jour dans son module builtins, l'implémentation Python du module externe TI-Python n'est certes pas la plus complète. Toutefois elle se classe quand même honorablement parmi les plus complètes à la 2nde place, deux cheveux devant la NumWorks, et laisse la Graph 90+E loin derrière !
Mais quel dommage que ce module externe TI-Python apparemment aussi complet ne soit pas utilisable aux examens en France !...