OutillageTravauxPratiques

[wiki: Travaux Pratiques]

PageOutline

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


}}}


Attachments