Résolution de problèmes, fonctions et traitements conditionnels

But

  • Papier crayon à l'honneur pour la résolution de problèmes.

  • Représentation de la solution avec pseudo-codes et organigrammes.

  • Retour sur les fonctions.

  • Traitements conditionnels (if/elif/else).

Énoncé

On essaie de déterminer la catégorie d’une personne et ce que cette personne peut faire dans la société en raison de son âge selon certains critères.

Les critères sont :

  • Droit de vote : avoir au moins 18 ans

  • Être à l’école : avoir entre 5 et moins de 50 ans

  • Pouvoir conduire : avoir 16 ans et plus

  • Avoir un prix spécial pour la STO: avoir moins de 18 ans ou 65 ans et plus

  • Avoir sa carte de l’âge d’or: avoir 50 ans ou plus

  • Notez qu’il est possible d’avoir une fraction d’âge, c’est-à-dire 13.5 ans!

On considère qu’une personne est un ou une :

  • adulte, si son âge dépasse 18 ans,

  • adolescent.e, si son âge se situe entre 12 et 18 ans et

  • enfant, si son âge ne dépasse pas 11 ans.

Votre programme doit donner la possibilité à l’utilisateur d’entrer le nom, le prénom et l'année de naissance d’une personne et, ensuite, de pouvoir afficher, selon son choix, l’âge et la catégorie de cette personne, ce qu’il peut faire en société, ou les deux (3 choix).

Un affichage propre et aligné sera important pour bien voir les réponses.

Voir l'annexe pour un aperçu du résultat d'exécution d'un tel programme.


Résolution

Avant de commencer à écrire un code source, il est primordial de réfléchir et de concevoir une solution par écrit, via des diagrammes (organigramme) ou un pseudo-code.

Notes de cours sur la résolution de problèmes (ne faites pas l’exercice qui est dans ces notes de cours).

  • Découpage du problème en sous-problèmes -> Identification des fonctions

    • Question à se poser : Quelles sont les parties distinctes du problème qu'on peut traiter, chacune, indépendamment des autres parties ?

    • Chacune des parties correspond à une fonction.

  • Quelles sont les entrées sorties pour chaque sous-problème?

  • La résolution de chaque sous-problème se fait dans les étapes suivantes.

Solution : Découpage en sous-problèmes (fonctions) et entrées sorties

Question à se poser : Quelles sont les parties distinctes du problème qu'on peut traiter, chacune, indépendamment des autres parties ?

  • Fonctions :

    • Calculer l'âge d'une personne.

    • Trouver la catégorie d'une personne selon son âge.

    • Afficher les droits et privilèges d'une personne selon son âge.

  • Programme principal :

    • Lire les entrées de l'utilisateur

    • Traiter les choix.

    • Afficher les résultats selon le choix.

Quelles sont les entrées (paramètres) sorties (valeurs de retours) pour chaque sous-problème?

  • Calculer l'âge d'une personne :

    Paramètre : année de naissance.

    Valeur de retour : âge .

  • Trouver la catégorie d'une personne selon son âge :

    Paramètre : âge.

    Valeur de retour : catégorie.

  • Afficher les droits et privilèges d'une personne selon son âge :

    Paramètre : âge.

    Valeur de retour : aucun, la fonction doit afficher elle même les droits et privilèges.


Une solution incomplète d’un sous-problème vous a été fournie à travers un organigramme et un pseudo-code ainsi qu’un programme en python. Voir les notes de cours pour plus de détails sur les méthodes de présentation d’une solution.

Organigramme pour trouver la catégorie d'une personne selon son âge

À vos marques ...

  1. La fonction categorie_age ainsi que le programme principal contiennent des erreurs de syntaxe et d'exécution. Vous devez les corriger afin de faire fonctionner votre programme. Voir les notes de cours sur les traitements conditionnels au besoin.

Solution

Erreurs syntaxiques : Il y a des indentations manquantes aux lignes 10, 12 ainsi que la ligne 17.

->

Erreur d'exécution : l'âge doit être un paramètre (une entrée) de la fonction.

Comment le savoir?

  • Mentionné à l'étape de résolution de problèmes. On doit donner l'âge comme entrée à la fonction pour qu'elle puisse trouver la catégorie.

  • Mentionné dans la documentation (docstring) de la fonction.

->

  1. Testez votre fonction avec les âges : 30, 15, 8. Que constatez-vous?

Solution
  • Afin de tester la fonction, nous devons d'abord l'appeler dans le programme principal.

  • Cette fonction a besoin du paramètre age pour fonctionner. On doit donc lui passer les valeurs d'âge 30, 15, 8, un à la fois.

  • Étant donné que la fonction retourne une valeur, qui est la catégorie, on doit "l'attraper" dans le programme principal et la mettre dans une variable. Cette variable sera appelée categorie .

On doit donc exécuter le programme avec les valeurs demandées :

  • Réponse : Il y a une erreur de logique. Lorsqu'on a 8 ans, on est enfant et non pas adolescent.

age
Résultat attendu
Résultat observé

30

adulte

adulte

15

adolescent

adolescent

8

enfant

adolescent

Note : pour l'instant, vous pouvez tester votre fonction sans utiliser l'année de naissance.

  1. La fonction ne traite pas le cas où l'âge correspond à celui d'un enfant. Il s'agit d'une erreur de logique que vous allez corriger.

    • Avant de corriger l'erreur de logique, vous avez besoin de connaître les structures décisionnelles multiples. Prenez le temps de lire les notes de cours.

    • Complétez l'organigramme et le pseudo-code ci-dessus afin de prendre en compte le cas où l'âge correspond à celui d'un enfant. (utilisez le papier et crayon pour schématiser votre organigramme et écrire votre pseudo-code).

    • Corrigez ensuite votre fonction et testez la. Assurez-vous d'avoir mis à jour la documentation (docstring) de la fonction.

Solution

Syntaxe structure décisionnelle multiple if/elif/else

Pseudo-code corrigé

Organigramme corrigé

Fonction corrigée :

  • Notez que la documentation de la fonction (docstring) a également été corrigée!

  1. Maintenant, vous allez compléter la résolution du problème. Pour chacun des sous-problèmes (fonctions) restant(e)s,

    1. créez un algorithme (pseudo-code ou organigramme (papier crayon)),

    2. traduisez votre algorithme en une fonction Python et

    3. testez votre fonction :

      • Créez un plan de test contenant des valeurs variées.

      • Testez votre programme pour confirmer son fonctionnement et relevez les erreurs.

Solution
  • Pseudo-code de la fonction calcul_age :

  • Organigramme de la fonction calcul_age :

  • Fonction calcul_age en python :

Appel de la fonction calcul_age dans le programme principal

Notez que nous avons besoin de l'année de naissance (variable annee_naisse) de la personne afin de calculer son âge.

  • Pseudo-code de la fonction affichage_droits :

  • Organigramme de la fonction affichage_droits : (ça sera trop grand en organigramme, on se contente du pseudo-code 😄 )

  • Fonction affichage_droits en python :

  1. Finalisez le programme principal de façon à permettre de donner à l'utilisateur le choix mentionné dans l'énoncé.

Solution
  • Pseudo-code du programme principal

  • Programme principal en Python

Traduisez le pseudo-code en code Python.

Annexe

Voici un exemple de résultat d'exécuté de la totalité du programme :

Last updated