Complément - niveau intermédiaire¶
Nous reprenons le cas de la fonction fibonacci que nous avons déjà vue, mais cette fois nous voulons que l’utilisateur puisse indiquer l’entier en entrée de l’algorithme, non plus en répondant à une question, mais sur la ligne de commande, c’est-à-dire en tapant :
$ python3 fibonacci.py 12Avertissement :
Attention, cette version-ci ne fonctionne pas dans ce notebook, justement car on n’a pas de moyen dans un notebook d’invoquer un programme en lui passant des arguments de cette façon. Ce notebook est rédigé pour vous permettre de vous entraîner avec la fonction de téléchargement au format Python, qu’on a vue dans la vidéo, et de faire tourner ce programme sur votre propre ordinateur.
Le module argparse¶
Cette fois nous importons le module argparse, c’est lui qui va nous permettre d’interpréter les arguments passés sur la ligne de commande.
from argparse import ArgumentParserPuis nous répétons la fonction fibonacci :
def fibonacci(n):
"retourne le nombre de fibonacci pour l'entier n"
# pour les deux premières valeurs de n, on peut renvoyer n
if n <= 1:
return n
# sinon on initialise f2 pour n-2 et f1 pour n-1
f2, f1 = 0, 1
# et on itère n-1 fois pour additionner
for i in range(2, n + 1):
f2, f1 = f1, f1 + f2
# print(i, f2, f1)
# le résultat est dans f1
return f1Remarque :
Certains d’entre vous auront évidemment remarqué que l’on aurait pu éviter de copier-coller la fonction fibonacci comme cela ; c’est à ça que servent les modules, mais nous n’en sommes pas là.
Un objet parser¶
À présent, nous utilisons le module argparse, pour lui dire qu’on attend exactement un argument sur la ligne de commande, et qu’il doit être un entier. Ici encore, ne vous inquiétez pas si vous ne comprenez pas tout le code. L’objectif est de vous donner un morceau de code utilisable tout de suite, pour jouer avec votre interpréteur Python.
# à nouveau : ceci n'est pas conçu pour être exécuté dans le notebook !
parser = ArgumentParser()
parser.add_argument(dest="entier", type=int,
help="entier d'entrée")
input_args = parser.parse_args()
entier = input_args.entierThe history saving thread hit an unexpected error (OperationalError('disk I/O error')).History will not be written to the database.
usage: ipykernel_launcher.py [-h] entier
ipykernel_launcher.py: error: argument entier: invalid int value: '/github/home/.local/share/jupyter/runtime/kernel-1a3905db-2338-427c-b792-74d99bc6bcc1.json'
An exception has occurred, use %tb to see the full traceback.
SystemExit: 2
/__w/course/course/venv/lib/python3.12/site-packages/IPython/core/interactiveshell.py:3709: UserWarning: To exit: use 'exit', 'quit', or Ctrl-D.
warn("To exit: use 'exit', 'quit', or Ctrl-D.", stacklevel=1)
Nous pouvons à présent afficher le résultat :
print(f"fibonacci({entier}) = {fibonacci(entier)}")---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[4], line 1
----> 1 print(f"fibonacci({entier}) = {fibonacci(entier)}")
NameError: name 'entier' is not definedVous pouvez donc à présent :
télécharger ce code sur votre disque comme un fichier
fibonacci.pyen utilisant le menu “File -> Download as -> Python”l’exécuter avec simplement l’interpréteur Python comme ceci :
$ python3 fibonacci.py 56(sans taper le signe $ qui indique simplement le prompt du terminal.)