Boucles | Exercices 1-5

Enoncé exercice 1

Ecrire un programme Python qui lit un entier n puis calcule et affiche la somme des entiers de 1 jusqu’à n en utilisant la boucle for.

Correction exercice 1

On va commencer le programme en demandant à l’utilisateur d’entrer un entier n (ligne 1).

Pour faire la somme des entiers de 1 jusqu’à n, sans utiliser la formule connue, on doit passer sur tous les éléments de cet intervalle, et ajouter à chaque fois l’élément en main à la somme des entiers déjà parcourus. Par exemple, si on souhaite faire la somme des entiers de 1 jusqu’à 5, on va parcourir les éléments 1, 2, 3, 4 et 5. Avant de commencer cette procédure, on peut dire que la somme est égale à 0. Et on va lui ajouter un à un les autres éléments. Ceci va donner :

  • Au départ : somme = 0
  • Après l’ajout de 1 : somme = 0 + 1 = 1
  • Après l’ajout de 2 : somme = 1 + 2 = 3
  • Après l’ajout de 3 : somme = 3 + 3 = 6
  • Après l’ajout de 4 : somme = 6 + 4 = 10
  • Après l’ajout de 5 : somme = 10 + 5 = 15

D’après cet exemple on peut faire deux remarques. La première est que si le nombre n est grand, par exemple 1000, on doit réaliser 1000 sommes. Donc c’est hors de question d’écrire 1000 lignes de code simplement pour trouver la somme de ces éléments. Et la deuxième remarque est que ce travail est répétitif. On prend à chaque fois l’ancienne valeur de la somme et on lui ajoute un nouvel élément pour avoir la nouvelle valeur de la somme. C’est exactement là que les boucles entrent en jeu. Et c’est seulement sur deux lignes que tout ceci sera fait.

Le langage Python dispose de deux types de boucles, la boucle for et la boucle while. Elles servent toutes les deux à faire les tâches répétitives. On va s’intéresser ici seulement à la boucle for. Elle sert à parcourir les éléments d’un ensemble.

L’ensemble des éléments à parcourir dans cet exercice est l’intervalle de 1 à n les deux compris. Pour créer cet ensemble on utilisera range(1,n+1). La boucle for va se charger de nous extraire à chaque fois un entier de cet ensemble, qu’on appellera i, et c’est à nous d’en faire ce que nous souhaitons.

La syntaxe de la boucle for traduit l’idée suivante : pour chaque élément i dans l’ensemble range(1,n+1) faire somme=somme+1 (lignes 3-4).

Elle ne faut pas oublier d’initialiser la variable somme par 0 avant d’entrer dans la boucle for (ligne 2).

On termine le programme en affichant la somme calculée à l’aide de la fonction print (ligne 5).

Solution exercice 1
n=int(input("Entrez un entier: "))
somme=0
for i in range(1,n+1):
    somme=somme+i
print("La somme des entiers jusqu'à {} est: {}".format(n,somme))
Enoncé exercice 2

Ecrire un programme Python qui lit un entier n et affiche tous les nombres pairs compris entre 0 et n (les deux inclus) sur une seule ligne et séparés par des espaces.

Correction exercice 2

L’astuce pour cet exercice tourne autour de l’exploitation de la fonction range pour créer un ensemble d’entiers constitué seulement des nombres pairs entre 0 et n. La fonction range, en plus des bornes, peut admettre un troisième argument qui est le pas. Par défaut le pas est 1. Donc si la forme range(0,n+1) va nous préparer un ensemble constitué des entiers {0, 1, 2,…, n-1, n} cette forme range(0,n+1,2) va nous donner l’ensemble {0, 2, 4,… (n ou n-1 selon la parité de n)}. La fonction range ne fait que commencer par la première borne et se déplace par le pas pour générer les autres éléments tout en restant au dessous de la deuxième borne. Ceci dit, la boucle for aura la forme suivante : for i in range(0,n+1,2) (ligne 3).

A l’intérieur du bloc de la boucle for, on va utiliser la fonction print pour afficher à chaque fois l’élément i. Pour pouvoir afficher la tous ces entiers sur une seule ligne, il faudra altérer le comportement par défaut de la fonction print. On va la commander à afficher un espace après chaque affichage au lieu de retourner à une nouvelle ligne. Ceci est fait en ajoutant end(” “), précédé d’une virgule, avant de fermer la parenthèse de la fonction print (ligne 3).

Solution exercice 2
n=int(input("Entrez un entier: "))
print("Les nombres pairs jusqu'à {} sont:".format(n))
for i in range(0,n+1,2):
    print(i,end=(" "))
Enoncé exercice 3

Ecrire un programme Python qui lit un entier n, puis affiche tous les entiers de n jusqu’à 1 sur une seule ligne et séparés par des espaces. Par exemple si l’utilisateur entre 5, on affichera : 5 4 3 2 1.

Correction exercice 3

Cet exercice est là pour montrer que la fonction range peut accepter un pas négatif. Ici, on a besoin de créer un ensemble où, d’un élément au suivant, on doit faire une décrémentation par 1. Ceci correspond à un pas négatif dont la valeur est -1. Donc on va passer à la fonction range le paramètre n en premier, suivi de 0 et non pas 1 car la deuxième borne n’est jamais atteinte par range. Et on termine par le pas -1 comme troisième paramètre (ligne 3).

Le bloc de la boucle for est constitué d’une seule instruction, qui est la fonction print à qui on a commandé d’afficher un espace après chaque affichage au lieu du retour à la ligne (ligne 4).

Solution exercice 3
n=int(input("Entrez un entier: "))
print("Les nombres de {} jusqu'à 1 sont:".format(n))
for i in range(n,0,-1):
    print(i,end=(" "))
Enoncé exercice 4

Ecrire un programme Python qui lit une somme d’argent puis une liste de dépenses, une par une, jusqu’à ce que la somme s’épuise où devient insuffisante. Afficher dans ce dernier cas le supplément d’argent nécessaire pour couvrir toutes les dépenses y compris la dernière.

Correction exercice 4

Dans ce programme, on va lire une somme d’argent, puis des dépenses qu’on va soustraire à la somme d’argent de départ, une après l’autre, jusqu’à ce qu’elle s’épuise ou devient insuffisante. Dans cette situation, on a affaire à un traitement répétitif, qui s’arrête lorsqu’une condition n’est plus vérifiée. C’est à ce genre de tâches que la boucle while a été conçue.

On va commencer le programme par la lecture de la somme d’argent à la disposition de l’utilisateur vers la variable somme (ligne 1). On va ensuite utiliser la boucle while pour lire à chaque fois une dépense et la soustraire à la somme d’argent qui reste (lignes 4-5). Ce traitement peut continuer tant que la somme d’argent est toujours supérieure à 0. C’est cela qui va donner à la boucle while sa condition somme>0 (ligne 2).

Une fois sortis de la boucle while, on va faire un test sur la valeur de la variable somme, qui peut être soit nulle ou négative. Et selon le cas, on affichera que la somme d’argent va couvrir exactement les dépense ou afficher –somme comme étant la somme nécessaire pour satisfaire à toutes les dépenses entrées (lignes 5-8).

Solution exercice 4
somme=int(input("Entrez une somme d'argent: "))
while somme>0:
    depense=int(input("Entrez une dépense: "))
    somme-=depense
if somme==0:
    print("C'est tout ce que vous pouvez faire avec cette somme")
else:
    print("Il vous faudra {} de plus pour faire tout ceci.".format(-somme))
Enoncé exercice 5

Ecrire un programme Python qui propose répétitivement à l’utilisateur de donner le résultat de la somme de deux nombres générés aléatoirement, compris entre 0 et 9. Et qui permet d’augmenter son score de 1000 points pour chaque bonne réponse, puis affiche le score actuel. Et arrête le jeu, une fois que l’utilisateur donne une mauvaise réponse et puis affiche le score final.

Correction exercice 5

On va commencer le programme par l’accueil de l’utilisateur et l’initialisation de son score à 0 (lignes 2-3). Et on va utiliser une boucle while pour mener le jeu (lignes 5-14). Cette boucle doit tourner tant que la dernière réponse donnée est correcte. Donc on lui donnera comme condition reponse==True, où reponse est une variable booléenne à qui on va affecter la valeur False une fois que l’utilisateur fera une erreur. Ce changement de la valeur de la variable reponse vers False entrainera l’arrêt de la boucle while.

Pour pouvoir entrer dans la boucle while et commencer le jeu, sa condition doit être déjà vérifiée. Donc, on doit initialiser la valeur de reponse par True (ligne 4).

A l’intérieur du bloc de la boucle while, on va commencer par la génération des deux entiers a et b qu’on va proposer à l’utilisateur (lignes 6-7). Ceci sera réalisé à l’aide de l’outil random.range() défini dans le module random, qu’il ne faut pas oublier d’importer (ligne 1). Ensuite, on va afficher les deux entiers a et b, et on lira la réponse de l’utilisateur dans la variable s (ligne 8).

On effectuera une comparaison entre la réponse donnée s et la vraie valeur de la somme qui est a+b. Si elles sont égales, on actualisera le score et on l’affiche (lignes 9-11). Si elles ne le sont pas, on affectera à la variable booléenne reponse la valeur False, et on affiche le score final (lignes 12-14).

Solution exercice 5
import random
print("Bienvenue au jeu!")
score=0;
reponse=True
while reponse==True:
    a=random.randrange(1,10)
    b=random.randrange(1,10)
    s=int(input("{}+{} donne combien? ... ".format(a,b)))
    if s==a+b:
        score=score+1000
        print("Correct! Votre score actuel est: ",score)
    else:
        reponse=False
        print("Faux! Votre score final est: ",score)