[wiki: Travaux Pratiques]
Dans ce TP, nous allons créer une calculatrice qui va prendre une expression et la calculer. L’objectif est d’utilisez « Spyder » et de développer un programme composé de multiples fichiers source. La calculatrice aura donc une fonction principale de calcul qui renverra le résultat de l’expression, qui s’utilisera ainsi :
$> python main.py
>>> 3 + 4 * 6 / 5
( ['=', '+', '*', '/'] [3.0, 4.0, 6.0, 5.0] )
8.4
>>> OFF
Le main
Créer un fichier main.py qui va récupérer l’expression tapée par l’utilisateur et l’afficher :
print()
ligne=input("calc> ")
print(" {:s} ".format(ligne))
Dans ce main, ajouter une boucle while qui récupère l’expression tapée tant que celle-ci est différente de « OFF »:
# -*- coding: utf-8 -*-
print()
ligne=input("calc> ")
while ligne!='OFF':
print(" {:s} ".format(ligne))
ligne=input("calc> ")
L’analyseur
Créer un fichier analyseur.py et y copier le code ci-dessous :
# -*- coding: utf-8 -*-
import re
parse_op = re.compile(r'[-+*/]')
parse_num = re.compile(r'[^-+*/]+')
def analyse(s):
opList = parse_op.findall(s)
numList = list(map(float, parse_num.findall(s)))
if len(opList) != len(numList):
opList.insert(0, '=')
return opList, numList
Retourner dans le fichier main, importer le module analyseur et appeler la fonction analyse avec l’expression fourni en paramétre. Afficher le résultat.
$> python main.py
>>> 3 + 4 * 6 / 5
3 + 4 * 6 / 5
(['=', '+', '*', '/'], [3.0, 4.0, 6.0, 5.0])
>>> OFF
Les opérateurs
Créer un sous répertoire « operateurs ».
Pour chaque opération (+,-,*,/), créer un fichier portant le nom de l’opération.
Pour chaque opération, écrire sa définition retournant le résultat.
.
| main.py
| operateurs
| | init.py
| | addition.py
| | division.py
| | multiplication.py
| | soustraction.py
| analyseur.py
Modifier le init.py afin de créer un dictionnaire mappant l’operateur avec sa fonction.
Fonction de calcul et affichage du résultat
- créer un fichier nommé calculatrice.py
- importer le package operateurs
- importer la méthode analyse
- créer une fonction calcul qui va prendre en paramètre une chaine de caractère
- cette fonction va appeler la fonction analyse pour récupérer les opérateurs et les chiffres
- pour chaque opérateur, appeler la fonction correspondante avec les bons arguments et récupérer le résultat
- enfin cette fonction doit renvoyer le résultat global
- modifier le main pour qu’il affiche le résultat de l’appel de cette fonction
#!comment
distribution
Créer un fichier setup.py avec le minimum d'information pour distribuer le projet:
{{{
from distutils.core import setup
setup(name = 'macalculatrice',
version = '1.0',
author = 'Jane Doe',
description = 'module de calculatrice',
packages = ['calculatrice', 'calculatrice.operateurs'],
)
Pour créer la version distribuable, lancer la commande python setup.py sdist.
Vous pouvez maintenant distribuer votre projet, après avoir récupéré l’archive, vous pouvez l’installer avec python setup.py install
Après installation, on peut directement appeler le module créer (se placer dans un autre répertoire sans les sources)
$> python
Python ...
Type "help", "copyright", "credits" or "license" for more information.
>>> from calculatrice.calculatrice import calcule
>>> calcule("3 + 4 * 6 / 5")
( ['=', '+', '*', '/'] [3.0, 4.0, 6.0, 5.0] )
8.4
>>> OFF
}}}