Python

Boucle Pour
Exercices pour débuter

Conseils

Même si ce site permet de tester de petits programmes en Python, il est fortement conseillé de sauvegarder ces programmes à l'aide d'un environnement de programmation en Python (Pyzo, Geany, etc...). Pour cela, il faut donner à chaque programme un nom explicite puis les «organiser» dans les répertoires adéquats.

On pourra commencer par créer un dossier [Boucle_for]. Ce dossier contiendra tous les programmes (scripts) rédigés à partir de cette page.

Ensuite, il faut prendre l'habitude d'insérer des commentaires (pertinents) dans son programme. En Python, ces commentaires sont précédés d'un dièse «#». Ils ne sont pas interprétés lors de l'exécution des instructions.

Remarque importante

Les programmes en Python rédigés avec ce site ne doivent pas comporter d'accents ! A cause d'un seul caractère accentué, le programme est susceptible de ne pas être exécuté correctement.
Il en sera de même pour les dossiers : pas de caractères accentués ou d'espaces. Ce problème d'encodage des caractères sera étudié plus tard au cours de l'année.

Application directe du cours

Écrire un programme qui affiche (comme ci-dessous) la table de multiplication de 5, depuis «1 * 5» jusqu'à «20 * 5».

1 * 5 = 5
2 * 5 = 10
etc...

					
					
  • Une piste ?
  • Une solution ?
  • Une autre solution ?
Ne pas oublier la méthode .format() qui permet de mettre en forme l'affichage...

for i in range(1, 21):
    print('{0} * 5 = {1}'.format(i, i*5))
						

for i in range(20):
    print('{0} * 5 = {1}'.format(i+1, (i+1)*5))
						

On donne une liste d'acteurs : liste_acteurs = ['Tahar', 'Omar', 'Guillaume', 'Swann', 'Alex', 'Roschdy']

Utilisez cette liste pour produire la sortie suivante :

Tahar a eu le César du meilleur acteur
Omar a eu le César du meilleur acteur
Guillaume a eu le César du meilleur acteur
Swann a eu le César du meilleur acteur
Alex a eu le César du meilleur acteur
Roschdy a eu le César du meilleur acteur
			

					
					
  • Une piste ?
  • Une autre piste ?
  • Une solution ?
Il faut parcourir la liste...
Ne pas oublier d'utiliser une variable qui va prendre les différentes valeurs de la liste...

liste_acteurs = ['Tahar', 'Omar', 'Guillaume', 'Swann', 'Alex', 'Roschdy']

for acteur in liste_acteurs:
	print("{} a eu le César du meilleur acteur".format(acteur))
						

❤️ Concaténation de caractères ❤️

Il est possible de coller (le vrai mot est concaténer) deux chaînes de caractères par l'opérateur + : Par exemple, "a" + "b" en Python donne "ab"

Dans l'extrait de code suivant :

  • chaine est une variable initialisée avec un str vide : "";
  • on veut qu'en sortie de programme cette variable contienne la valeur 'bravo'.

L'idée est d'ajouter une par une les lettres à la variable chaine.

À l'exécution, le programme doit afficher uniquement bravo.

Compléter le code.

chaine = ""
for ... in ['b', 'r', 'a', 'v', 'o']:
	...
print(chaine)

Cette variable chaine est appelée un accumulateur. l'entier n saisi par l'utilisateur.


					
					
  • Une piste ?
  • Une autre piste ?
  • Encore une piste ?
  • Une solution ?
Avez-vous lu le paragraphe sur la Concaténation de chaînes de caractères au dessus de l'exercice ?
En python, 'b' + 'r' donne 'br'.
Vous n'avez pas oublié d'utiliser la variable chaine ?
Trop d'indices, il n'y aura pas de correction sur cet exercice :)

L'utilisateur entre un entier naturel. Dans l'exemple d'affichage ci-dessous, l'utilisateur a entré la valeur 10 après le message incitatif.

Entrer un entier positif : 10
La somme des entiers de 0 à 10 est 55

Écrire un programme qui calcule et affiche la somme des entiers jusqu'à l'entier n saisi par l'utilisateur.


					
					
  • Une piste ?
  • Une autre piste ?
  • Encore une piste ?
  • Une solution ?
Quelles sont les deux valeurs à stocker ?
L'utilisateur saisi une valeur stockée dans la variable n. On additionne 1 avec 2 avec 3 avec ... (jusqu'à) avec n.
Il faut retourner la valeur de la somme. Au tout début du programme, cette somme vaut forcément 0 car l'utilisateur n'a pas encore entré la valeur de n. On ajoute ensuite dans la somme, au fur et à mesure, un nouvel entier successeur du précédent jusqu'à n.

somme = 0                                       # on stocke la somme
n = int(input('Entrer un entier positif n : '))
for i in range(n+1):                            # Pour aller de 0 à n compris
    somme += i                                  # équivaut à somme = somme + i
print('La somme des entiers de 0 a {0} est {1}'.format(n, somme))
						

Modifier le script de l'exercice précédent pour calculer et afficher la somme des entiers pairs de 0 à n.


					
					
  • Une piste ?
  • Une autre piste ?
  • Une solution ?
Une unique contrainte a été ajoutée. Laquelle ?
Qu'est-ce qu'un entier pair ?
Réponse : un entier multiple du nombre 2...

somme = 0                                       # on stocke la somme
n = int(input('Entrer un entier positif n : '))
for i in range(0, n+1, 2):                      # De 0 à n compris, avec un pas de 2
    somme += i                                  # équivaut à somme = somme + i
print('La somme des entiers pairs de 0 a {0} est {1}'.format(n, somme))
						

Écrire un programme qui demande combien d'élèves il y a dans une classe, demande la note de chaque élève et calcule sa moyenne.


				
  • Une piste ?
  • Une solution ?
Il faut d'abord interroger l'utilisateur avec la méthode bien connue. Puis, il faut réutiliser ce nombre pour notre boucle qui va demander les notes. Enfin, on calcule la moyenne, en utilisant la somme des notes...

n = int(input("Combien y a-t-il d'élèves : "))
somme = 0
for _ in range(n):
    note = int(input("Entrer une note : "))
    somme += note
moyenne = somme / n
print("La moyenne est de", moyenne)

						

Dessinons avec Turtle

Spirale

Compléter le programme ci-dessous.
Ce programme doit permettre de réaliser le tracé ci-contre. Les longueurs en pixels sont là pour aider à la conception du programme, il n'est pas nécessaire qu'elles s'affichent à l'écran...


					
					
  • Une piste ?
  • Un schéma ?
  • Une analyse ?
  • Une solution ?
Il faut chercher un «pattern», c'est-à-dire un schéma répétitif dans le motif. Pour cela, écrire sur une feuille ce qu'il se passe de nouveau à chaque nouvelle étape.
Décomposition des premiers mouvements à effectuer par le crayon : Spirale décomposée
Le crayon doit...
  • avancer de 20 pixels ;
  • tourner à gauche de 90° ;
  • avancer de 40 = 2 × 20 pixels ;
  • tourner à gauche de 90° ;
  • avancer de 60 = 3 × 20 pixels ;
  • tourner à gauche de 90° ;
  • avancer de 80 = 4 × 20 pixels ;
  • tourner à gauche de 90° ;
  • etc...

from turtle import *
t = Turtle()

##--- Ci-dessous, on complete le programme ---##
distance = 20                   # Longueur "constante" ajoutée au déplacement
for i in range(9):              # Valeurs prises de 0 à 8
	t.forward(distance*(i+1))	# donc i+1 va de 1 à 9...
	t.left(90)

##--- Fin du programme ---##											
exitonclick()

Un peu de mathématiques...

La suite (un) est définie par u0 = 1 et, pour tout entier naturel n, par un+1 = 2 un+3.

Écrire un programme qui :

  • demande à l'utilisateur un entier naturel n,
  • puis affiche la valeur de un.

Ci-dessous, l'utilisateur a entré la valeur 10 après le message incitatif.

Entrer un entier positif : 10
u_10 = 4093
  • Une piste ?
  • Une autre piste ?
  • Une solution ?
  • Variante
Le «numéro» du tour de boucle ne sert pas à faire de calcul.
Regarder son cours de maths pour avoir une idée de l'algorithme en pseudo-code.

n = int(input('Entrer un entier positif : '))
u = 1                                               # Valeur du 1er terme
for i in range(n):
    u = 2*u+3
print('u_{0} = {1}'.format(n, u))
						

Pour afficher TOUS les termes de la suite jusqu'à un, il faut penser à afficher le premier terme et le dernier terme :


n = int(input('Entrer un entier positif : '))
u = 1                                               # Valeur du 1er terme
for i in range(n):
    print('u_{0} = {1}'.format(i, u))               # Affiche de u_0 à u_(n-1)
    u = 2*u+3                                       # Calcule de u_1 à u_n
print('u_{0} = {1}'.format(n, u))                   # Affiche u_n