Première NSIProjets

Fonctions : La caisse du foyer

Tenir la caisse du foyer avec des fonctions, des conditions et des boucles, sans liste ni dictionnaire.

Projet - La caisse du foyer

Le but de ce projet est de tenir la caisse du foyer du lycée pendant la récréation. Ce projet consiste à servir les clients un par un, encaisser, rendre la monnaie, puis afficher le bilan. Le foyer vend trois articles.

Ce projet se fait tôt dans l'année. Le programme tient dans des variables simples. Chaque information (un prix, un total, un nombre de jus) a sa propre variable.

Contraintes de programmation

Le correcteur ouvre le fichier et vérifie ces règles avant de lire le reste.

Types autorisés : int, float, str, bool.

Instructions autorisées : if / elif / else, while, for, range, def, return, global, input, print, les opérateurs arithmétiques et les comparaisons.

Une chaîne est un seul texte : un choix ("1"), une réponse ("oui"), un message affiché. On peut coller deux textes avec +. On peut comparer deux textes avec ==.

range(n) sert uniquement à répéter une action n fois. On ne le transforme pas en collection, et on ne le stocke pas.

Interdit dans tout le fichier :

  • les listes, dictionnaires, tuples et ensembles (list, dict, tuple, set), ainsi que les crochets et les accolades qui servent à en créer ;
  • ranger plusieurs ventes, plusieurs noms ou plusieurs prix dans une seule variable ;
  • lire un caractère ou un morceau de texte par un indice ou une tranche (texte[i], texte[i:j]) ;
  • .split(), .join(), .append(), et toute méthode dont le résultat est une collection ;
  • les fichiers (open) et les classes.

Les trois prix sont écrits dans la fonction prix_article, chacun derrière un if. Il n'y a pas de catalogue à côté.

Les compteurs de la journée sont des variables séparées : nb_jus, nb_cookies, nb_sandwiches, nb_ventes, total.

1. Les trois articles

ChoixArticlePrix
"1"jus1,20 €
"2"cookie0,80 €
"3"sandwich3,50 €

En Python les prix s'écrivent avec un point : 1.2, 0.8, 3.5. À l'écran, on affiche deux décimales.

Choisir un exercice

Cliquer sur un exercice de la liste pour afficher son sujet.

2. Une ligne de ticket

Choisir un exercice

Cliquer sur un exercice de la liste pour afficher son sujet.

3. Un client

Dialogue attendu pour un client servi (les lignes après > sont ce que tape l'utilisateur) :

Article (1 jus, 2 cookie, 3 sandwich) : > 3
Quantité : > 2
À payer : 7.00 €
Montant donné : > 10
Monnaie : 3.00 €

servir_client() renvoie alors 7.0 : l'argent encaissé, pas la monnaie.

Si le choix puis la quantité sont invalides, on redemande avant de parler d'argent :

Article (1 jus, 2 cookie, 3 sandwich) : > 9
Choix invalide.
Article (1 jus, 2 cookie, 3 sandwich) : > 2
Quantité : > 0
Quantité invalide.
Quantité : > 4
À payer : 3.20 €
Montant donné : > 2
Montant insuffisant. Vente annulée.

servir_client() renvoie alors 0.0. Les compteurs de la journée ne bougent pas.

Choisir un exercice

Cliquer sur un exercice de la liste pour afficher son sujet.

4. La récréation

Le programme demande d'abord Nombre maximum de clients : . Ce nombre est un entier supérieur ou égal à 1. Sinon, on repose la question (while).

Ensuite une boucle for va de 1 jusqu'à ce nombre. À chaque tour :

  1. appeler servir_client() ;
  2. si le montant renvoyé est supérieur à 0, l'ajouter à total, ajouter 1 à nb_ventes, et ajouter la quantité au compteur du bon article ;
  3. demander Un autre client ? (oui/non) : . Seule la réponse exacte oui continue. Toute autre réponse termine la journée, même s'il reste des tours possibles.

On ne conserve pas le détail de chaque ticket. Seuls les cinq compteurs survivent d'un client à l'autre.

Choisir un exercice

Cliquer sur un exercice de la liste pour afficher son sujet.

5. Le bilan

Deux ventes encaissées : 2 sandwiches (7,00 €) puis 1 jus (1,20 €).

--- Bilan de la récré ---
Ventes encaissées : 2
Total : 8.20 €
Ticket moyen : 4.10 €
Jus : 1
Cookies : 0
Sandwiches : 2
Le plus vendu : sandwich (2)

Le ticket moyen est total / nb_ventes. S'il n'y a eu aucune vente, on affiche Aucune vente. et on ne fait pas la division.

Messages du plus vendu :

  • un article strictement devant : Le plus vendu : sandwich (2)
  • deux articles à égalité devant le troisième : Égalité : jus et cookie (3 chacun)
  • les trois à égalité : Égalité : jus, cookie et sandwich (2 chacun)

Les trois nombres se comparent avec des if. On n'assemble pas les noms dans une collection pour les trier.

Choisir un exercice

Cliquer sur un exercice de la liste pour afficher son sujet.

Ce qu'on rend. Un seul fichier caisse_foyer.py :

  • en tête, un commentaire avec son nom et la classe ;
  • les sept fonctions, avec ces noms-là ;
  • le programme principal qui lance la journée puis appelle resume_journee ;
  • les print de test peuvent rester, à condition de ne pas gêner la saisie (les regrouper sous un commentaire, ou les enlever une fois les tests passés).

Un fichier qui calcule juste mais qui stocke les tickets dans une liste ne respecte pas les contraintes.