Exercices sur les conteneurs

Manipulation des listes

On considère la liste [1, 5, 3, 5, 6, 2]

  1. Écrire une fonction ‘somme’ qui renvoie la somme des éléments d’une liste de nombres. On fera explicitement la boucle for.

  2. Écrire une fonction ‘maximum’ qui renvoie le maximum des éléments d’une liste de nombres. On fera explicitement la boucle for.

  3. Écrire une fonction ‘arg_maximum’ qui renvoie l’indice du maximum d’une liste de nombres. On fera explicitement la boucle for.

  4. Écrire une fonction ‘trouve’ qui renvoie l’indice correspondant à l’argument. On fera explicitement la boucle for.

  5. Comment répondre aux questions 1, 2, 3, 4 en utilisant des fonctions déjà existantes ?

l = [1, 5, 3, 5, 6, 2]

def somme(l):
    output = 0
    for val in l:
        output += val
    return output

def maximum(l):
    if len(l)==0:
        return None
    output = l[0]
    for val in l[1:]:
        if val>output:
            output = val
    return output

def arg_maximum(l):
    if len(l)==0:
        return None
    output = l[0]
    i_max = 0
    for i, val in enumerate(l):
        if val>output:
            output = val
            i_max = i
    return i_max
 
def trouve(l, valeur_a_trouver):
    for i, val in enumerate(l):
        if valeur_a_trouver==val:
            return i
    else:
        return None
    
# On peut utiliser sum, max et l.index

Liste comprehension

  1. Créer une liste nomée nombres contenant les entiers de 0 à 9 inclus

  2. Créer une liste contenant la racine carré des éléments de nombres (on utilisera une comprehension de liste)

  3. Créer une liste contenant tous les nombres pairs de la listes nombres (on utilisera une comprehension de liste)

  4. Toujours en utilisant un comprehension de liste, considérant deux listes l1 et l2, créer une nouvelle liste contenant les couples pris deux à deux de l1 et l2. On supposera que les deux liste ont la même longueur. Quelle fonction python fait la même chose ?

  5. En utilisant la fonction de la question 4 et la liste de la question 2 vérifier que l’on a bien \(y=x^2\) pour chaque élément.

import math
nombres = list(range(10))
racine_nombres = [math.sqrt(nb) for nb in nombres]
nb_pairs = [nb for nb in nombres if nb%2==0]
liste1 = ['A', 'B', 'C']
liste2 = [10, 4, 24]
def f(l1, l2):
    return [(l1[i], l2[i]) for i in range(len(l1))]

f(liste1, liste2)
[('A', 10), ('B', 4), ('C', 24)]
for a, racine_a in f(nombres, racine_nombres):
    if not math.isclose(a, racine_a**2):
        print(f'Problème avec {a} et {racine_a}')

Exercice de base sur les dictionnaires

  1. Tout d’abord, nous allons créer un petit dictionnaire qui contient des informations sur un étudiant. Utilisons les clés et valeurs suivantes en exemple :

    • ‘nom’: ‘Jean Dupont’

    • ‘âge’: 20

    • ‘filière’: ‘Informatique’

  2. Modifier l’age pour qu’il soit égal à 21

  3. Afficher le genre de l’étudiant si il possède une telle clé sinon afficher un message inquant que l’on ne connait pas son genre.

etudiant = {"nom": "Jean Dupont", 
           "age": 20,
           "filière": "Informatique"}

etudiant['age'] = 21

if 'genre' in etudiant:
    print("Le gende de l'étudiant est", etudiant['genre'])
else:
    print("L'étudiant n'a pas de genre spécifié")
    
L'étudiant n'a pas de genre spécifié

Exercice sur les ensembles

La fonction chr permet de convertir un code ASCII en un caractère. La liste des lettres majuscules peut être obtenue à partir de la commande suivante :

liste_majuscules = [chr(65+i) for i in range(26)]

On souhaite vérifier qu’un mot de passe entré par un utilisateur est sufisament compliqué. Voici les règles :

  • Il doit contenir 12 caractères différents

  • Il doit contenir au moins 2 majuscules différentes

  • Il doit contenir au moins un caractère de ponctuation .,;:!?

  • Il ne doit pas contenir d’espace

Ecrire une fonction qui renvoie True si toutes les conditions sont vérifiées et False sinon

majuscules = set(majuscules)
ponctuations = set(',.;:!?')

def verifie_mot_de_passe(mdp):
    mdp = set(mdp)
    if len(mdp)<12:
        return False
    if len(mdp&majuscules)<2:
        return False
    if not ponctuations&mdp:
        return False
    if ' ' in mdp:
        return False
    return True
verifie_mot_de_passe('edsfJe:;ZErb_4')
True