Programmer en Python et porter son code sur la NumWorks

Tutoriels

Ce tutoriel s’adresse à toute personne qui souhaite développer en python, et adapter ce code aux contraintes de la calculatrice NumWorks.

En octobre 2020, dans le cadre des projets de 1ère spécialité NSI, nos élèves doivent réaliser le projet suivant :

Proposer un utilitaire en python, il doit fonctionner sur la NumWorks.Retour ligne automatique
Aucune idée ? Regardez les utilitaires existants sur TI 83Retour ligne automatique
Les plus ambitieux peuvent tenter de faire un jeu.

Exploiter uniquement la console python

Si vous comptez coder un projet en python, et que vous ne prévoyez de n’exploiter que la console python pour y exécuter des scripts, appeler des fonctions, afficher du texte, vous pouvez utiliser n’importe quel IDE pour développer votre projet :

  • Thonny, Python IDE for beginners (win, mac, linux)
  • Spyder, complet et donc un peu lourd
  • PyCharm, Community Edition

Si vous choisissez un nouvel IDE, consulter un tutoriel peut vous permettre de bien démarrer et de gagner du temps ultérieurement.

Bien évidemment, il faut tenir compte de l’écran qui ne peut afficher simultanément 
que 29 caractères en largeur sur 11 lignes. test_affichage.py

Mais en exploitant au mieux ces valeurs, on peut néanmoins se débrouiller pour placer ce que l’on veut à l’écran, comme dans cet exemple polynome.py :

Coder en exploitant la couche graphique de la calculatrice

Si vous décidez d’exploiter la couche graphique de la calculatrice, vous pourrez donner libre cours à votre créativité, mais à ce jour malheureusement vous ne pourrez pas développer votre script sur l’IDE de votre choix.

L’interface de développement officielle de la calculatrice NumWorks 

Vous pouvez utiliser le workshop officiel de la NumWorks, qui est resté figé en 2018 et qui ne propose clairement pas, en octobre 2020, une interface efficace pour développer un vrai projet.

Une interface de développement alternative pour la calculatrice NumWorks 

Vous pouvez aussi utiliser l’IDE de Omega, l’OS alternatif de la NumWorks.
Il présente plusieurs avantages, comme une coloration syntaxique plus agréable, une complétion automatique des scripts, une sauvegarde en ligne sur github…

1. Se créer un compte Github
2. Se connecter sur l’IDE python Omega avec ses identifiants python
3. Se familiariser avec l’interface. Signaler les bugs sur le serveur discordde l’équipe de développement de cet OS alternatif.

C’est d’ailleurs cette dernière interface que nous utiliserons en spé NSI pour porter nos projets sur la NumWorks. Comme elle est en version alpha, elle risque d’avoir quelques bugs, cela pourrait être assez drôle …

Avis aux lecteurs : enseignant, ou développeur indépendant : 
Si vous vous sentez de porter les bibliothèques propriétaires de la NumWorks (le module kandinsky, le module ion) sur PC, cela serait avec grand plaisir que nous les diffuserions et en ferions la promotion.

L’idée serait qu’un script écrit pour la NumWorks puissent fonctionner sur PC, à l’identique.

Quelques exemples de script exploitant la couche graphique de la calculatrice NumWorks :

Une roue Chromatique : chromac.py (ne marche pas sur le workshop, fonctionne sur la calculatrice et sur Omega IDE)

Roue chromatique

Un petit jeu inspiré de Bombrun sur Casio : planeur_bombe.py

Capture d’écran de Bombrun

Un tetris, pour passer le temps en cours de maths : tetris.py

Capture d’écran de Tetris

Si les codes de ces scripts ne sont pas faciles à comprendre, des ressources proposées à la fin de cet article peuvent t’éclairer utilement.

Quelques tests graphiques très simples

test_draw.py pour comprendre comment afficher du texte, un peu n’importe où sur l’écran.

cercle.py, pour tracer un cercle, image obtenue avec un appel de la fonction cercle(120,120,42)

Les capacités de la calculatrice

Qui a volé la mémoire de la calculatrice ? 

Avant d’attaquer le cœur du sujet à savoir le développement du projet python sur la calculatrice, il convient de lister les forces et faiblesses de cette calculatrice.

Si son ergonomie est admirable, son écran IPS lumineux et bien contrasté, son design moderne et convivial, l’application python est fort limitée.

32 Ko, c’est la taille totale et maximale de la somme des poids des scripts que vous pourrez stocker sur cette calculatrice. Il est impossible d’exploiter, pleinement la puce de 8 Mo soudée sur sa carte mère, la mémoire de stockage est gérée de manière non optimale. Espérons que cela changera.

32 ko, c’est la taille du tas python disponible pour exécuter les scripts. Si la calculatrice est dotée d’un CPU parfaitement dimensionné en terme de puissance, malheureusement seulement 32 Ko des 256 Ko de RAM de la puce ARM seront exploitables par votre script python. Là encore, le problème est lié à la jeunesse de cette calculatrice, et à la gestion de sa mémoire.

Pour que cela change plus vite, tu peux toi aussi contacter la société NumWorks.

Conséquences immédiates : 

  • Il va falloir coder intelligemment, et si votre script dépasse les 8 Ko il y a de fortes chances qu’il refuse de s’exécuter.
  • Il ne va pas falloir oublier que tout objet créé par le programme va occuper bien plus de place en mémoire que la sommes des poids en octets de ses caractères ACSII…

Des ressources et des exemples à exploiter

La documentation officielle de la calculatrice

Les tutoriels vidéos de Eric SCHRAFSTETTER

Plus de 63 tutoriels vidéos sur la NumWorks et l’utilisation des couches graphiques. Très didactiques, ces vidéos peuvent mettre vous aider dans la compréhension du langage python et des bonnes pratiques.

Quelques vidéos incontournables 

  • Exercice « Machine à sous »
  • Jeu pour apprendre les drapeaux
  • Plateau et pièces d’un jeu d’échecs
  • Le jeu Mastermind en Python
  • Programmons le jeu Snake en Python sur la Numworks !
  • Programmons le jeu 2048 en Python sur la Numworks !
  • Jeu du Pendu sur Numworks et Ti 83 Edition Python
  • Transformez votre Numworks en panneau LED défilant
  • Jeu de réflexion « Carré magique » pour la NUMWORKS
  • Programmons un jeu Démineur en Python sur la Numworks !

Les bibliothèques de scripts python

Voici quelques bibliothèques de scripts python optimisés pour la NumWorks.
La plupart des scripts fonctionneront sur le Workshop de NumWorks, pour certains scripts il faudra les tester sur la calculatrice.

La page d’accueil référençant certains scripts : https://workshop.numworks.com/python

Quelques dossiers à parcourir :

Nom du dossier Lien Auteurs 
numworkshttps://workshop.numworks.com/python/numworksDépôt officiel
schrafhttps://workshop.numworks.com/python/schrafEric Schrafstetter, enseignant & youtubeur
andreanxhttps://workshop.numworks.com/python/andreanxXavier Andréani, , enseignant & tiplanet.org
florian-allardhttps://workshop.numworks.com/python/florian-allardFlorian Allard, enseignant
ph-moutouhttps://workshop.numworks.com/python/ph-moutouPhilippe Moutou, enseignant, site web
telpe51https://workshop.numworks.com/python/telpe51 ?, Outils graphiques
nicolas-patroishttps://workshop.numworks.com/python/telpe51Enseignant, site web

Vous pouvez aussi retrouver quelques scripts publiés conçu pour NumWorks et parfois publié sur nsi.xyz sur les espaces workshop de Vincent ROBERTKévin Fedyna et Arthur Jacquin.

Le site https://tiplanet.org/, qui contient plus grosse bibliothèques de scripts toutes calculatrices confondues, il y a une section dédié à la NumWorks et des idées ou concepts dont on peut s’inspirer dans les dossiers TI 83 PCE ou TI 82+/83+/4

Si vous ne trouverez pas beaucoup de script pour la NumWorks sur le site https://tiplanet.org/, vous y trouverez par contre une source d’inspiration sur ce qui a déjà été fait, et ce qu’il est possible de faire…

Tester, tester, tester

Il convient lors du développement d’un projet de le tester régulièrement sur l’appareil sur lequel il doit finalement tourner.

Pour cela il faudra transférer le script sur la calculatrice.

Ce tutoriel vous guidera pour faire ceci depuis le workshop. Il est également possible de le faire depuis l’IDE Omega. Dans les deux cas, il faudra le faire depuis le navigateur Google Chrome.

Quelques petits scripts bien utiles

Lorsqu’une flèche est pressée, déclencher une action

from ion import keydown
 
def move():
    while not keydown(5):
        if keydown(0):
            pass #appeler ici une fonction
        elif keydown(3):
            pass #appeler ici une fonction
        elif  keydown(1):
            pass #appeler ici une fonction
        elif keydown(2):
            pass #appeler ici une fonction
        sleep(0.120)

Une coloration qui respecte l’OS

Ce code vérifie si votre calculatrice NumWorks utilise Epsilon, l’OS officiel de la NumWorks ou Omega, l’OS amélioré.

try:
    get_keys()
    os = (192,53,53)
except:
    os = (255,183,52)

La variable os contiendra désormais la couleur par défaut l’OS.
Ceci permet de colorer l’interface de l’application python en respectant le code couleur de la calculatrice. Nous utilisons cet astuce sur le Tetris.

Un menu simple à adapter

# Script Menu simple sans appel à une fonction
 
choix = 0 # Il est toujours utile d'initialiser une variable
 
# Le menu à afficher
print("Vous aimez la spé NSI ?")
print("1. Non (deconseille)")
print("2. Oui")
print("9. Quitter le programme")
 
# Le choix a faire
while choix > 2 or choix < 1 or choix != 9:
    choix = int(input("\n=>"))
 
# Le test conditionnel pour le menu
if choix == 0:
    print("Mauvaise reponse")
elif choix == 1:
    print("Bonne reponse")
else:
    print("Au revoir")


Un menu qui appelle des fonctions python

#version 2020
def fonction1(): # def définie une fonction.
    print("="*20)
    print("Vous avez fait le choix 1, excellent choix")
    print("="*20)
    return True
 
def fonction2(): 
    print("="*20)
    print("Vous avez fait le choix 2, vous allez rater votre vie")
    print("="*20)
    return True
 
def menu():
    choix = 0
    while choix!=9:
        print("Vous aimez la spé NSI ?")
        print("1. Oui")
        print("2. Non")  # ** Si vous ajoutez un choix au menu 
        print("9. Quitter le programme")    
        choix=int(input())
        if choix==1:
            fonction1()
        elif choix==2: # ** Vous devrez ajouter un elif comparable à celui-ci
            fonction2()
        elif choix==9:
            print("="*20)
            print("Au revoir !")