☀️
420-1G2-HU Logique de programmation
  • 👋Bienvenue dans le cours de logique de programmation!
  • Bases de la logique de programmation
    • Concepts de la programmation
    • Les opérateurs
      • Exercices
    • Les commentaires
  • Les données
    • Les données et types simples
    • Les variables, les constantes et les opérations de base
    • Les opérations d'écriture et de lecture
    • Les opérations sur les chaînes de caractères
    • Laboratoire 1 - données
    • Laboratoire 2 - données
  • Les collections de données
    • Les listes
    • Les opérations sur les listes
    • Laboratoire listes - solution
    • Les dictionnaires
      • Exercices
  • Différents types de traitements
    • Structures logiques séquentielle
    • Structures logiques conditionnelles (if/else/elif)
    • Structures logiques répétitives (boucles)
      • Exercices de base
      • Laboratoire boucles - solution
  • Modularisation
    • Création et appels des fonctions
    • La documentation des fonctions
    • Annotation de types dans les fonctions
    • Laboratoire - fonctions (niveau débutant)
    • Révision express fonctions
    • Les modules
      • Laboratoire
  • La portée des variables
  • Débogage
    • 🫂Le débogueur, c'est ton ami!
      • Introductions aux outils de débogage
      • Techniques de débogage
    • Les erreurs et exceptions
      • Introduction aux notions d’erreurs
      • Les exceptions et leurs gestion
      • Exercices de base - avec solutions
      • Laboratoire débogage et gestion des erreurs -solution
  • Tests unitaires
    • Tests unitaires
    • Exercice
  • Cryptographie
    • Introduction à la cryptographie
  • Les fichiers
    • Accès aux fichiers
  • Résolution de problèmes
    • Résolution de problèmes : exercice introductif
    • Étapes d'analyse et de résolution de problèmes
  • Activités avec Légos
    • Introduction à la programmation
    • Consolidation sur les fonctions avec des blocs
    • Pratiquer les boucles avec des blocs
  • Laboratoires
    • Simulation combat - dragon vs chevalier
    • Simulateur de bataille - Les anneaux du pouvoir
    • Jeu de cartes
    • Lien logique mathématique
      • Algèbre de Boole
    • Crypto variée
    • Après Noël
  • git - système de gestion de versions
    • Introduction à Git
    • Étapes de création des dépôts Git
  • Classes inversées
    • Résolution de problèmes, fonctions et traitements conditionnels
  • Examens
    • Examen 2 - 2023
    • Examen 3 - 2023
    • Examen 2 - 2024
  • Révision
    • Fonctions, gestion d'erreurs et tests unitaires
    • Résolution de problème
  • Trucs utiles
    • Check-list
Powered by GitBook
On this page
  • But
  • Énoncé
  • Exercice 1
  • Exercice 2
  • Exercice 3
  1. Différents types de traitements
  2. Structures logiques répétitives (boucles)

Laboratoire boucles - solution

But

  • Maîtriser les boucles.

  • Consolider la matière vue précédemment.

  • Continuer à utiliser les fonctions.

Énoncé

Pour chaque exercice, vous devez également :

  • Créer le pseudo code ou l'organigramme avant de le traduire en code Python.

  • Créer un plan de tests et bien tester son programme.

  • Utiliser le débogueur au besoin.

Exercice 1

Il s'agit de faire un jeu à 2 joueurs pour deviner un nombre. Le premier joueur devra entrer le nombre à faire deviner et le second tentera de trouver le nombre. Pour aider, le programme devra indiquer s'il faut monter ou descendre. Le pointage final équivaut au nombre de tentatives.

Suggestion :

Pour faire "disparaître" le nombre choisi par le premier joueur, effectuer 100 print vide après avoir obtenu le nombre.

Solution
#################### Pseudo code - fonction deviner_nombre ####################
# Paramètres d'entrée de la fonction : nomre_a_deviner
# Sortie : aucun (on affiche le résultat)
##############################################################################
#Demander au joueur de proposer un nombre 
#Tant que nombre != nombre_a_deviner#  
#    Si le nombre proposé == nombre à deviner
#         On a trouvé le nombre, donc on sort de la boucle (break)
#    Sinon
#         Si le nombre proposé est < nombre à deviner
#             Dire à l'utilisateur de proposer un nombre plus grand
#         Sinon
#             Dire à l'utilisateur de proposer un nombre plus petit.
#
#    Demander au joueur de proposer un nombre
#
# Afficher le Bravo, avec la bonne réponse et le score
###############################################################################


########################## Pseudo-code programme principal ##########################
Demander à l'utilisateur le nombre à faire deviner et le mettre dans la variable nombre_gagnant. 
Laisser 100 lignes vides.
Appeler la fonction : deviner_nombre(nombre_gagnant)
###############################################################################
def deviner_nombre(nombre_a_deviner:int):
    """
    Fonction qui permet de guider l'utilisateur
    à deviner un nombre passé en paramètres.
    :param nombre_a_deviner: Le nombre à deviner.
    :return: Aucun
    """

    score = 0
    trouve = False

    while not trouve:
        score += 1

        nombre_propose = int(input(f"Tentative {score}: Quel nombre tentez-vous? "))

        if nombre_propose == nombre_gagnant:
            trouve = True
        else:
            if nombre_propose < nombre_a_deviner:
                print("Le nombre est plus haut")
            else:
                print("Le nombre est plus petit")

    print("*******************************")
    print(f"Bravo! La bonne réponse était {nombre_gagnant}")
    print(f"Votre score est de {score}")


if __name__ == "__main__":
    nombre_gagnant = int(input("Quel est le nombre à faire deviner? "))
    print("\n" * 100)

    deviner_nombre(nombre_gagnant)

Exercice 2

Imaginez que vous développez un programme pour une application de gestion de prêts. Vous devez développer un programme qui aidera les utilisateurs à suivre le remboursement de leurs dettes. Le remboursement de la dette peut-être fait en plusieurs fois. L'utilisateur doit fournir des montants de remboursement jusqu'à ce que la dette soit entièrement payée ou que l'utilisateur entre une valeur non numérique.

À la fin du processus, le programme doit afficher le nombre total de paiements effectués.

Résultat attendu :

Quel est le montant de la dette? 4000
Dette: 4000.0$. Combien voulez-vous rembourser? 2500
Dette: 1500.0$. Combien voulez-vous rembourser? 1000
Dette: 500.0$. Combien voulez-vous rembourser? 500
Dernier remboursement de 500.0 $ effectué
********************
Nombre de paiements:     3
Montant total remboursé: 4000.0 $
********************
Solution
################################## pseudo-code fonction remboursements_dette #########################################
# paramètres d'entrée : dette
# Valeur de retour (sortie) : aucun (affichage)
######################################################################################################################
# nb_remboursement = 0
# total_remboursements = dette
#
# Tant que la dette n'est pas totalement remboursée (dette > 0) ou que utilisateur entre une valeur non numérique ()
#       Demander montant de remboursement à l'utilisateur : remboursement
#       Si remboursement < 0 alors
#           Afficher qu'il est impossible de faire le remboursement.
#           On ignore la suite des instruction et on re-boucle
#       Sinon si remboursement >= dette, alors
#           dette = 0
#           Incrémenter le nombre de remboursement : nb_remboursement = nb_remboursement + 1
#       Sinon
#           Mettre à jour la dette avec le montant remboursé : dette = dette - remboursement
#           Incrémenter le nombre de remboursement : nb_remboursement = nb_remboursement + 1
#
######################################################################################################################
############################ programme principal #####################################################################
# Lire le montant de la dette
# Appeler la fonction remboursements_dette(dette)
######################################################################################################################
  • Code Python

def remboursements_dette(dette : float):
    nb_remboursements = 0
    total_remboursements = dette

    while dette > 0:
        remboursement_str = input(f"Dette: {dette}$. Combien voulez-vous rembourser? ")

        if remboursement_str.isalpha():
            break

        remboursement = float(remboursement_str)

        if remboursement < 0 :
            print("Impossible de faire le remboursement, nombre négatif!")
            continue

        elif remboursement >= dette:
            print(f"Dernier remboursement de dette ({dette}) effectué.")
            dette = 0
            nb_remboursements += 1
        else:
            dette -= remboursement
            nb_remboursements += 1

    total_remboursements = total_remboursements - dette

    print("*" * 20)
    print(f"Nombre de paiements:     {nb_remboursements}")
    print(f"Montant total remboursé: {total_remboursements} $")
    print("*" * 20)


if __name__ == "__main__":
    dette = float(input("Quel est le montant de la dette? "))
    remboursements_dette(dette)

Exercice 3

Imaginez que vous travaillez sur un projet de suivi climatique pour une station météorologique. Le programme doit permettre à l'utilisateur d'entrer des températures successivement. Lorsque l'utilisateur souhaite terminer, il devra entrer le mot "arrêt".

À la fin, le programme affichera la température la plus basse, la température la plus haute et la température moyenne parmi celles qui ont été saisies.

Entrez une température (ou 'arrêt' pour finir) : 25
Entrez une température (ou 'arrêt' pour finir) : 18
Entrez une température (ou 'arrêt' pour finir) : 22
Entrez une température (ou 'arrêt' pour finir) : arrêt

La température la plus basse est : 18
La température la plus élevée est : 25
La température moyenne est : 21.67
Solution
def calculer_min(temp_min, temperature):
    """
    Fonction qui retourne la température minimale entre la nouvelle température
    et la température minimale actuelle.

    :param temp_min: Température minimale actuelle.
    :param temperature: Nouvelle température.
    :return: La température minimale mise à jour.
    """

    if temperature < temp_min:
        temp_min = temperature

    # Notez qu'il est possible de trouver la plus petite
    # température avec la fonction min()
    # temp_min = min(temp_min, temperature)

    return temp_min

def calculer_max(temp_max, temperature):
    """
    Fonction qui retourne la température maximale entre la nouvelle température
    et la température maximale actuelle.

    :param temp_max: Température maximale actuelle.
    :param temperature: Nouvelle température.
    :return: La température maximale mise à jour.
    """

    if temperature > temp_max:
        temp_max = temperature

    # Notez qu'il est possible de trouver la plus grande
    # température avec la fonction max : max()
    # temp_max = max(temp_max, temperature)

    return temp_max

def calculer_somme(cumul_temp, temperature):
    """
    Cette fonction met à jour le cumul des températures en ajoutant une nouvelle
    valeur de température au cumul existant.

    :param cumul_temp: Le cumul actuel des températures.
    :param temperature: La nouvelle température à ajouter au cumul.
    :return: Le nouveau cumul des températures après l'ajout.
    """
    cumul_temp += temperature

    return cumul_temp

def calculer_moyenne(total, nb_valeurs):
    """
    Fonction qui calcule et retourne la moyenne des températures.

    :param total: La somme des températures.
    :param count: Le nombre total de températures.
    :return: La moyenne des températures.
    """

    moyenne = total / nb_valeurs
    return moyenne


def afficher_statistiques(temp_min, temp_max, temp_moyenne):
    """
    Fonction qui affiche les statistiques des températures.

    :param temp_min: Température minimale.
    :param temp_max: Température maximale.
    :param temp_moyenne: Température moyenne.
    """
    print(f"Température minimum : {temp_min}")
    print(f"Température maximum : {temp_max}")
    print(f"Température moyenne : {temp_moyenne}")


if __name__ == "__main__":
    temp_min = float('inf')
    temp_max = float('-inf')
    total_temp = 0
    compteur = 0

    temperature_str = input("Veuillez entrer une température : ")

    while temperature_str != "arrêt" :

        temperature = float(temperature_str)

        temp_min = calculer_min(temp_min, temperature)
        temp_max = calculer_max(temp_max, temperature)
        total_temp = calculer_somme(total_temp, temperature)
        compteur += 1

        temperature_str = input("Veuillez entrer une température : ")


    temp_moyenne = calculer_moyenne(total_temp, compteur)
    afficher_statistiques(temp_min, temp_max, temp_moyenne)

PreviousExercices de baseNextCréation et appels des fonctions

Last updated 8 months ago