Exercice 3
Exercices sur les boucles et les fonctions
1. Affichage simple avec une boucle
Ăcris un programme qui affiche les nombres de 1 Ă 10 en utilisant une boucle for.
Réponse :
for i in range(1,11):
print(i)
2. Somme des entiers
Ăcris un programme qui calcule et affiche la somme des nombres de 1 Ă 100 en utilisant une boucle.
Réponse :
resultat = 0
for i in range(1,101):
resultat = resultat + i
print(resultat)
3. Compter les nombres pairs
Ăcris un programme qui affiche tous les nombres pairs entre 1 et 50 grĂące Ă une boucle.
Réponse :
for i in range(1,51):
if i % 2 == 0:
print(i)
4. Factorielle
Ăcris une fonction factorielle(n) qui calcule la factorielle de n.
Teste la fonction avec plusieurs valeurs.
Exemple :
factorielle(5) = 120
Réponse :
def factorielle(n):
resultat = 1
for i in range(1,n+1):
resultat = resultat + i
return resultat
5. Table de multiplication
Ăcris une fonction table(n) qui affiche la table de multiplication de n (de 1 Ă 10).
Exemple :
table(7) doit afficher la table de 7.
Réponse :
def table(n):
for i in range(1,11):
print(n," x ", i, " = ", n*i)
6. Compter les voyelles
Ăcris une fonction compter_voyelles(mot) qui retourne le nombre de voyelles contenues dans une chaĂźne de caractĂšres.
Exemple :
compter_voyelles("Bonjour") â 3.
Réponse :
def compter_voyelles(mot):
resultat = 0
for lettre in mot:
if lettre in "aeiouy":
resultat = resultat + 1
return resultat
7. Somme des chiffres
Ăcris une fonction somme_chiffres(n) qui calcule la somme des chiffres dâun nombre entier.
Exemple :
somme_chiffres(1234) â 10.
Réponse :
def somme_chiffres(n):
mot_n = str(n)
resultat = 0
for chiffre in mot_n:
resultat = resultat + int(chiffre)
return resultat
8. Suite de Fibonacci (optionnel)
Ăcris une fonction fibonacci(n) qui affiche les n premiers termes de la suite de Fibonacci.
Exemple :
fibonacci(7) â 0 1 1 2 3 5 8.
Réponse :
def fibonacci(n):
a = 0
b = 1
for i in range(n):
print(a, end=" ")
temp = a + b
a = b
b = temp
9. Nombre premier
Ăcris une fonction est_premier(n) qui renvoie True si n est un nombre premier, et False sinon.
Puis, Ă©cris un programme qui affiche tous les nombres premiers jusquâĂ 100.
Réponse :
def est_premier(n):
if n < 2:
return False
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
return False
return True
# Affichage des nombres premiers jusqu'Ă 100
for nombre in range(2, 101):
if est_premier(nombre):
print(nombre, end=" ")
10. Dessin avec boucles
Ăcris un programme qui affiche un triangle de hauteur n en utilisant une boucle.
Exemple :
pour n = 5 :
*
**
***
****
*****
Réponse :
def triangle(n):
for i in range(1,n+1):
ligne = "*" * i
print(ligne)
exercice complémentaire
11. Nombres parfaits
Un nombre parfait est un nombre égal à la somme de ses diviseurs propres (par exemple 6 = 1 + 2 + 3).
- Ăcris une fonction
est_parfait(n)qui vĂ©rifie sinest un nombre parfait. - Ăcris un programme qui affiche tous les nombres parfaits entre 1 et 1000.
Réponse :
def est_parfait(n):
somme = 0
for i in range(1, n):
if n % i == 0:
somme += i
return somme == n
# Affichage des nombres parfaits entre 1 et 1000
for nombre in range(1, 1001):
if est_parfait(nombre):
print(nombre, end=" ")
12. Dessin en losange
Ăcris une fonction losange(n) qui affiche un losange de hauteur 2n - 1 en utilisant des boucles.
Exemple :
pour n = 4 :
*
***
*****
*******
*****
***
*
Réponse :
def losange(n):
for i in range(1,n+1):
ligne = "*" * i
print(ligne)
j = n - 1
while j > 0:
ligne = "*" * j
print(ligne)
j = j-1
13. Décomposition en facteurs premiers
Ăcris une fonction facteurs_premiers(n) qui dĂ©compose un entier en produit de nombres premiers et les affiches.
Exemple :
facteurs_premiers(84)â2, 2, 3, 7facteurs_premiers(97)â97
Réponse :
def facteurs_premiers(n):
facteur = 2
while n > 1:
if n % facteur == 0:
print(facteur, end="")
n //= facteur
if n > 1:
print(", ", end="")
else:
facteur += 1
14. Nombre mystĂšre
Ăcris une fonction deviner(n) qui fait deviner un nombre entre 1 et n.
- Lâordinateur choisit un nombre au hasard.
- Lâutilisateur doit proposer des valeurs (saisies au clavier).
- Le programme indique trop grand ou trop petit.
- Quand le nombre est trouvĂ©, afficher le nombre dâessais.
Réponse :
import random
def deviner(n):
secret = random.randint(1, n)
essais = 0
trouve = False
print(f"J'ai choisi un nombre entre 1 et {n}. Essaie de le deviner !")
while trouve != True:
proposition = int(input("Ta proposition : "))
essais += 1
if proposition < secret:
print("Trop petit !")
elif proposition > secret:
print("Trop grand !")
else:
print(f"Bravo ! Tu as trouvé en {essais} essai(s).")
trouve = True
15. Somme des chiffres pairs
Ăcris une fonction somme_pairs(nombre) qui renvoie la somme des chiffres pairs dâun entier.
Exemple :
somme_pairs(48215)â14(car 4 + 8 + 2 = 14)
Réponse :
def somme_pairs(n):
mot_n = str(n)
resultat = 0
for chiffre in mot_n:
if int(chiffre) % 2 == 0:
resultat = resultat + int(chiffre)
return resultat
16. Triangle inversé
Ăcris une fonction triangle_inverse(n) qui affiche un triangle de n lignes avec des * dĂ©croissants.
Exemple :
triangle_inverse(5)
***** **** *** ** *
Réponse :
def losange(n):
j = n - 1
while j > 0:
ligne = "*" * j
print(ligne)
j = j-1
17. Anagrammes
Ăcris une fonction est_anagramme(mot1, mot2) qui retourne True si les deux mots sont des anagrammes (mĂȘmes lettres en nombre identique, ordre diffĂ©rent).
Exemple :
est_anagramme("chien", "niche")âTrueest_anagramme("python", "typhon")âTrueest_anagramme("test", "tseta")âFalse
Réponse :
def est_anagramme(mot1, mot2):
# On met les mots en minuscules pour éviter les différences entre majuscules/minuscules
mot1 = mot1.lower()
mot2 = mot2.lower()
# Si les mots n'ont pas la mĂȘme longueur, ils ne peuvent pas ĂȘtre des anagrammes
if len(mot1) != len(mot2):
return False
# Pour chaque lettre du premier mot
for lettre in mot1:
# On cherche cette lettre dans le deuxiĂšme mot
position = -1
for i in range(len(mot2)):
if mot2[i] == lettre:
position = i # on note oĂč elle se trouve
break
# Si la lettre n'est pas trouvĂ©e â ce nâest pas une anagramme
if position == -1:
return False
# On enlÚve la lettre trouvée dans mot2 en collant la partie gauche a la lettre a sa partie a droite
mot2 = mot2[:position] + mot2[position+1:]
# Si Ă la fin, mot2 est vide, toutes les lettres ont Ă©tĂ© utilisĂ©es â câest une anagramme
return len(mot2) == 0
# --- Programme principal ---
motA = input("Entrez le premier mot : ")
motB = input("Entrez le deuxiĂšme mot : ")
if est_anagramme(motA, motB):
print("Les deux mots sont des anagrammes â
")
else:
print("Les deux mots ne sont pas des anagrammes â")
18. Mots en escalier
Ăcris une fonction escalier_mot(mot) qui affiche un mot en escalier.
Exemple :
escalier_mot("PYTHON")
P PY PYT PYTH PYTHO PYTHON
Réponse :
def escalier_mot(mot):
ligne = ""
for lettre in mot:
ligne = ligne + lettre
print(ligne)
19. Symétrie verticale
Ăcris une fonction symetrie(mot) qui crĂ©e un effet miroir en concatĂ©nant le mot avec son inverse.
Exemple :
symetrie("code")â"codeedoc"
Réponse :
def symetrie(mot):
mot_copie = mot[:] # ici, on effectue une copie Ă l'aide de [:] pour eviter d'ecraser le mot mis en parametre
i = len(mot) -1
while i >= 0:
mot_copie = mot_copie + mot[i]
i = i -1
return mot_copie
20. CaractÚre le plus fréquent
Ăcris une fonction plus_frequent(texte) qui retourne le caractĂšre le plus frĂ©quent dans une chaĂźne (en ignorant les espaces).
Exemple :
plus_frequent("abracadabra")â'a'
Réponse :
def plus_frequent(texte):
caractere_max = "" # le caractÚre le plus fréquent
frequence_max = 0 # combien de fois il apparaĂźt
# On parcourt chaque caractĂšre du texte
for caractere in texte:
if caractere != " ": # on ignore les espaces
# Compter combien de fois ce caractĂšre apparaĂźt
compteur = 0
for c in texte:
if c == caractere:
compteur += 1
# Si ce caractÚre est plus fréquent que le précédent, on le garde
if compteur > frequence_max:
frequence_max = compteur
caractere_max = caractere
return caractere_max