Exercices Python sur les Comprehensions, Générateurs et Fonctions Intégrées

Exercices de Programmation Python Avancés

1. Conversion entre un dictionnaire et une liste de tuples à l'aide de comprehensions :


dico_personne = {'nom': 'Alice', 'âge': 30, 'sexe': 'femme'}
liste_paires = [('nom', 'Alice'), ('âge', 30), ('sexe', 'femme')]
dico_vers_liste = [(clé, val) for clé, val in dico_personne.items()]
liste_vers_dico = {clé: val for clé, val in liste_paires}

2. Générateur pour une séquance infinie de nombres triangulaires (1, 3, 6, 10, ...) :


def generateur_triangles():
    accumulateur = 0
    compteur = 1
    while True:
        accumulateur += compteur
        yield accumulateur
        compteur += 1

gen_tri = generateur_triangles()
print(next(gen_tri))  # 1
print(next(gen_tri))  # 3
print(next(gen_tri))  # 6
print(next(gen_tri))  # 10

3. Calcul récursif de la suite de Fibonacci pour modéliser la croissance d'une population de lapins :


def fibonacci_pop(mois, ancien, nouveau):
    if mois > 18:
        return ancien
    prochain = ancien + nouveau
    resultat = fibonacci_pop(mois + 1, nouveau, prochain)
    return resultat

total_lapins = fibonacci_pop(1, 0, 1)
print(total_lapins)  # Nombre de lapins après 18 mois

4. Application de map avec une fonction lambda pour classifier des notes :


points = [52, 67, 93]
evaluations = list(map(lambda p: 'réussi' if p >= 60 else 'échoué', points))
print(evaluations)  # ['échoué', 'réussi', 'réussi']

5. Utilisation de reduce pour calculer une somme cumulative :


from functools import reduce
somme_totale = reduce(lambda a, b: a + b, [52, 67, 93])
print(somme_totale)

6. Affichage des représentations binaire, octale et hexadécimale d'un nombre :


valeur = 128
print(bin(valeur))
print(oct(valeur))
print(hex(valeur))

7. Démonstration de fonctions intégrées : sum, pow, callable


print(sum([52, 67, 93]))
print(pow(13, 7))
print(callable(sum))  # Vérifier si un objet est appelable

8. Itération avec une boucle for sur divreses structures de données :


# Listes
seq_liste = [10, 20, 30, 40]
for item in seq_liste:
    print(item)

# Tuples
seq_tuple = (100, 200, 300)
for item in seq_tuple:
    print(item)

# Dictionnaires
dico_iter = {'x': 5, 'y': 10, 'z': 15}
for cle in dico_iter:
    print(cle, dico_iter[cle])

# Utilisation d'enumerate pour obtenir l'indice
for idx, val in enumerate(seq_liste):
    print(idx, val)

# Itération sur les valeurs et paires clé-valeur
for val in dico_iter.values():
    print(val)
for cle, val in dico_iter.items():
    print(cle, val)

9. Implémentaiton d'une fonction range personnalisée à l'aide d'un générateur :


def ma_range(start, stop=None, step=1):
    if stop is None:
        stop = start
        start = 0
    courant = start
    if step > 0:
        while courant < stop:
            yield courant
            courant += step
    elif step < 0:
        while courant > stop:
            yield courant
            courant += step
    else:
        raise ValueError("Le pas ne peut pas être nul")

# Exemples d'utilisation
for n in ma_range(5):
    print(n)  # 0,1,2,3,4

for n in ma_range(5, 10):
    print(n)  # 5,6,7,8,9

for n in ma_range(5, 10, 2):
    print(n)  # 5,7,9

for n in ma_range(10, 5, -2):
    print(n)  # 10,8,6

for n in ma_range(10, 5):  # Aucune sortie car step positif et stop < start
    print(n)

Étiquettes: Python compréhensions générateurs récursion fonctions intégrées

Publié le 30 mai à 21h12