C5 : Exercices

Exercices de base

C5.E1 : Les dix premiers nombres

Écrire une fonction qui affiche tous les nombres entre 1 et 10, et indique pour chacun si celui-ci est pair ou impair.

L'affichage dans la console sera :

1 est impair
2 est pair
...
10 est pair

On proposera deux versions : l'une avec while, l'autre avec for.

Afficher la correction

Version avec for :

def aff_pair_impair():
    for i in range(1,11):
        if i % 2 == 0:
            print(str(i) + " est pair.")
        else:
            print(str(i) + " est impair.")

# ==== Programme principal ====
aff_pair_impair()

Version avec while :

def aff_pair_impair():
    i = 1
    while i <= 10:
        if i % 2 == 0:
            print(str(i) + " est pair.")
        else:
            print(str(i) + " est impair.")
        i = i+1

# ==== Programme principal ====
aff_pair_impair()

C5.E2 : Les nombres dans l'ordre décroissant

Écrire une fonction qui prend un entier n en paramètre et affiche, ligne après ligne, les nombres de n à 1.

On proposera deux versions : l'une avec while, l'autre avec for.

Afficher la correction

Version avec while

def aff_nbs_decroissant(n:int):
    i = n
    while i >=1:
        print(i)
        i = i - 1

# ==== Programme principal ====
nb = int(input("Entrer un nombre : "))
aff_nbs_decroissant(nb)

Versions avec for

def aff_nbs_decroissant(n:int):
    for i in range(n, 0, -1):
        print(i)

def aff_nbs_decroissant_v2(n:int):
    for i in range(-n, 0):
        print(-i)

def aff_nbs_decroissant_v3(n:int):
    for i in range(0, n):
        print(n - i)


# ==== Programme principal ====
nb = int(input("Entrer un nombre : "))
aff_nbs_decroissant_v3(nb)

C5.E3 : Les premiers nombres dans une chaine de caractères

Écrire une fonction qui prend un entier n en paramètre et renvoie une chaine de caractères constituée de ces nombres dans l'ordre croissant, séparés par des virgules.

Par exemple, avec l'entier 6, la fonction doit renvoyer "1, 2, 3, 4, 5, 6".

Afficher la correction

Version avec while :

def chaine_nombres(n:int):
    chaine = ""
    for i in range(1,n):
        chaine = chaine + str(i) + ", "
    chaine = chaine + str(n)
    return chaine

# ==== Programme principal ====
nb = int(input("Entrer un nombre : "))
print(chaine_nombres(nb))

Version avec for :

def chaine_nombres(n:int):
    i = 1
    chaine = ""
    while i < n:
        chaine = chaine + str(i) + ", "
        i = i + 1
    chaine = chaine + str(i)
    return chaine

# ==== Programme principal ====
nb = int(input("Entrer un nombre : "))
print(chaine_nombres(nb))

C5.E4 : Pour apprendre ses tables de multiplication

1) Écrire une fonction qui affiche la table de multiplication de 8.

Autrement dit, l'affichage dans la console doit être :

8 × 1 = 8
8 × 2 = 16
...
8 × 10 = 80

2) Écrire une fonction qui prend un nombre entier en paramètre et affiche la table de multiplication de ce nombre.

3) En utilisant la fonction précédente, écrire un programme qui affiche la table de multiplication d'un entier (entre 2 et 10) entré par l'utilisateur.

Afficher la correction

1)

def tab_mult_8():
    for i in range(1,11):
        print("8 × " + str(i) + " = " + str(8 * i))

# ==== Programme principal ====
tab_mult_8()

2) et 3)

def tab_mult_n(n: int):
    for i in range(1,11):
        print(str(n) + " × " + str(i) + " = " + str(n * i))

# ==== Programme principal ====
nb = int(input("Entrer un nombre : "))
tab_mult_n(nb)

C5.E5 : Les premières puissances de 2

Écrire un programme qui :

Exemple : si l'utilisateur entre le nombre 18, le programme doit afficher les nombres 1, 2, 4, 8 et 16.

Afficher la correction

Première version :

def aff_puiss2_inf_a(nb_max:int):
    puiss2 = 1
    while puiss2 <= nb_max:
        print(puiss2)
        puiss2 = puiss2 * 2

# ==== Programme principal ====
nb = int(input("Entrer la valeur maximale voulue : "))
aff_puiss2_inf_a(nb)

Deuxième version :

def aff_puiss2_inf_a(nb_max:int):
    puiss2 = 1
    while puiss2 <= nb_max:
        print(puiss2)
        puiss2 = puiss2 * 2

# ==== Programme principal ====
nb = int(input("Entrer la valeur maximale voulue : "))
aff_puiss2_inf_a(nb)

C5.E6 : Nombre de voyelles dans une chaine de caractères

1) Écrire une fonction nb_voyelles(ch) qui prend une chaine de caractères en paramètre et renvoie le nombre de voyelles présentes dans cette chaine.

Exemple : nb_coyelles("abcdef") doit renvoyer 2.

2) Écrire le programme principal qui permet de tester cette fonction avec une chaine de caractères entrée par l'utilisateur.

Afficher la correction
def nb_voyelles(ch:str)->int:
    """
    Renvoie le nombre de voyelles d'une chaine de caractères.
    """
    nb_v = 0
    for lettre in ch:
        if lettre == "a" or lettre == "e" or lettre == "i" or lettre == "o" or lettre == "u" or lettre == "y" :
            nb_v = nb_v + 1
    return nb_v

# ==== Programme principal ====
chaine = input("Entrer une chaine de caractères : ")
print("Le nombre de voyelles dans la chaine " + chaine + " est " + str(nb_voyelles(chaine)))

Exercices de synthèse : petits programmes

C5.E11 :

1) Sans utiliser l'opérateur multiplier *, écrire une fonction qui prend un entier n en paramètre et renvoie une chaine contenant n '◼' à la suite.

Par exemple, avec le nombre entier 7, la fonction doit renvoyer : '◼◼◼◼◼◼◼'

2) Utiliser la fonction précédente dans une nouvelle fonction qui permet d'afficher exactement le résultats ci-dessous :

◼
◼◼
◼◼◼
◼◼◼◼
◼◼◼◼◼
◼◼◼◼◼◼
◼◼◼◼◼◼◼
Afficher la correction

1)

Version avec while :

def aff_ligne_carres(n:int):
    i = 1
    ligne = ""
    while i <= n:
        ligne = ligne + "◼"
        i = i + 1
    return ligne

Version avec for :

def aff_ligne_carres(n:int):
    ligne = ""
    for i in range (1, n+1):
        ligne = ligne + "◼"
    return ligne

2)

def aff_ligne_carres(n:int):
    ligne = ""
    for i in range (1, n+1):
        ligne = ligne + "◼"
    return ligne

# ==== Programme principal ====
for i in range(1,8):
    print(aff_ligne_carres(i))

C5.E12 : FizzBuzz

Écrire un programme qui parcourt les entiers de 1 à 100 et écrit :

1
2
3 fizz
4
5 buzz
6 fizz
7
8
9 fizz
10 buzz
11
12 fizz
13
14
15 fizzbuzz
16
Afficher la correction
def fizzbuzz():
    for i in range (1, 101):
        ligne = str(i) + " "
        if i % 3 == 0:
            ligne = ligne + "fizz"
        if i % 5 == 0:
            ligne = ligne + "buzz"
        print(ligne)

# ==== Programme principal ====
fizzbuzz()

C5.E13 : Jeu du plus-moins

Le jeu du plus/moins consiste à deviner un nombre entier compris entre 1 et 99 choisi au hasard par l'ordinateur. A chaque essai de l'utilisateur, l'ordinateur indique si le nombre proposé est trop petit, trop grand jusqu'à ce que l'utilisateur trouve.

Écrire le programme de ce jeu.

Afficher la correction
from random import randint

def essai_ok(val_ordi):
    val_utilisateur = int(input("Choisir un nombre entre 1 et 49 : "))
    if val_utilisateur > val_ordi:
        print("La valeur est trop grande...")
        return False
    elif val_utilisateur < val_ordi:
        print ("La valeur est trop petite...")
        return False
    else:
        print("BRAVO !")
        return True

def jeu_complet():
    val_ordinateur = randint(1, 49)
    while not essai_ok(val_ordinateur):
        pass

jeu_complet()

C5.E14 : Nombre de chiffres d'un nombre

Écrire une fonction qui prend un nombre entier positif en paramètre et renvoie le nombre de chiffres de cet entier.

Par exemples :

Plusieurs versions sont possibles... Si vous avez plusieurs idées, écrire plusieurs fonctions.

Afficher la correction
def nb_chiffres_v1(nb):
    nb_chiffres = 1
    while nb >= 10:
        nb_chiffres = nb_chiffres + 1
        nb = nb // 10
    return nb_chiffres

def nb_chiffres_v2(nb):
    return len(str(nb))

def nb_chiffres_v3(nb):
    if nb == 0:
        return 1
    else :
        i = 0
        while nb >= 10 ** i:
            i = i + 1
        return i

from math import log10
def nb_chiffres_v4(nb):
    if nb == 0:
        return 1
    else:
        return int(log10(n))+1

print(nb_chiffres_v1(45698))
print(nb_chiffres_v2(45698))
print(nb_chiffres_v3(45698))
print(nb_chiffres_v3(11))

C5.E15 : Somme d'une série de nombres

Écrire un programme qui :

Afficher la correction
boucler = True
somme = 0
while boucler:
    nombre = int(input("Entrer votre nombre (0 pour terminer) : "))
    if nombre == 0 :
        boucler = False
    somme = somme + nombre
print("La somme de vos nombres est : " + str(somme))

C5.E16 : Palindrome

Écrire une fonction est_palindrome(chaine) qui prend une chaine de caractères en paramètre et renvoie True si la chaine est un palindrome et False dans le cas contraire.

Afficher la correction
def est_palindrome_v1(chaine:str)->bool:
    for i in range(len(chaine)//2):
        if chaine[i] != chaine[-i-1]:
            return False
    return True

def est_palindrome_v2(chaine:str)->bool:
    # Retrounement de la chaine
    chaine_inv = ""
    for caractere in chaine:
        chaine_inv = caractere + chaine_inv
    # Comparaison de chaine et de chaine_inv
    return chaine == chaine_inv

# Programme principal
fct = est_palindrome_v1
print(fct("") == True)
print(fct("a") == True)
print(fct("aba") == True)
print(fct("abba") == True)
print(fct("ab") == False)
print(fct("abca") == False)