Aller au contenu

TD⚓︎

Exercice 1

foo = (1, 2, 3, 4)
  1. Que retournera foo[0], foo[4]?
  2. Quel sera l'effet de foo[1] = 5?
  3. Quel sera l'effet de a, b, c, d = foo?
  1. foo[0] retourne 1.

    foo[4] retourne une erreur (car foo est de taille 4 donc l'indice max est 3).

  2. foo[1] = 5 retourne une erreur car un tuple est non-mutable (on ne peut pas modifier un élément du tuple)

  3. cela affectera 1 à a, 2 à b, 3 à c et 4 à d.

Exercice 2

Écrire une fonction somme_produit(a, b) recevant deux valeurs (entières), et renvoyant leur somme et leur produit.

def somme_produit(a, b):
    return a + b, a * b

Exercice 3

Écrire une fonction liste_de_points(n) demandant à l'utilisateur les coordonnées de n points et les stockant dans une liste. Chaque point sera modélisé par un tuple (exemple (1,-5))

def liste_de_points(n):
    lst = []
    for i in range(n):
        x = int(input("Abscisse : "))
        y = int(input("Ordonnée : "))
        lst.append((x, y)) # Attention aux doubles parenthèses
    return lst

Exercice 4

def foo(bar):
    ''' 
    Parameters:
    bar (str): une chaine de caractère
    '''
    for var in bar:
        if var in "aeiouy":
            return True
    return False

Que fait cette fonction ?

Retourne True si il y a une voyelle dans le paramètre bar

Exercice 5

def foo(bar):
    ''' 
    Parameters:
    bar (list): une liste de listes
    '''
    for ligne in bar:
        for elem in ligne:
            if elem == 0:
                return True
    return False

Que fait cette fonction ?

Retourne True si la liste de listes bar contient au moins un 0

Exercice 6

  1. Ecrire une fonction nbre_de_a(chaine) prenant en paramètre une chaine de caractères chaine et retournant le nombre de a.
  2. Ecrire une fonction nbre_de_carac(chaine,carac) prenant en paramètre une chaine de caractères chaine et une chaine d'un unique caractère carac et retournant le nombre de fois que carac apparait dans le chaine.
  3. Ecrire une fonction nbre_de_voyelles(chaine) prenant en paramètre une chaine de caractères chaine retournant le nombre de voyelles dans le chaine.
  1. def nbre_de_a(chaine):
        cpt = 0
        for carac in chaine:
            if carac == "a":
                cpt += 1
        return cpt
    
  2. def nbre_de_carac(chaine, carac):
        cpt = 0
        for lettre in chaine:
            if lettre == carac:
                cpt += 1
        return cpt
    
  3. def nbre_de_voyelles(chaine):
        cpt = 0
        for lettre in chaine:
            if lettre in "aeiouy":
                cpt += 1
        return cpt
    

Exercice 7

Décrire les range suivant sur le modèle ci-dessous:

range(10) --> 0, 1, 2...., 9
  1. range(8)
  2. range(-5)
  3. range(3, 8)
  4. range(5, 4)
  5. range(3, 10, 2)
  6. range(3, 10, 20)

Exercice 8

Que retournent les phrases suivantes:

  1. [int(x) for x in ('1','29','3')]
  2. [int(x) for x in '2021']
  3. [int(x) for x in str(1998)]
  4. [c for c in 'bonjour' if c not in "aeiouy"]
  5. [i for i in range(10, 5, -1)]
  6. [i for i in range(10, 5, -3)]
  1. [1, 29, 3]
  2. [2, 0, 2, 1]
  3. [1, 9, 9, 8]
  4. ['b', 'n', j', 'r']
  5. [10, 9, 8, 7, 6]
  6. [10, 7]

Exercice 9

Que retournent les instructions suivantes:

  1. [ 1 for i in range(5)]
  2. [ i for i in range(5)]
  3. [ i + 1 for i in range(5)]
  4. [2 * i for i in range(5)]
  5. [i ** 2 for i in range(10) if i%2 == 0]
  6. [2 ** i for i in range(5)]
  1. [1, 1, 1, 1, 1]
  2. [0, 1, 2, 3, 4]
  3. [1, 2, 3, 4, 5]
  4. [0, 2, 4, 6, 8]
  5. [0, 4, 16, 36, 64]
  6. [1, 2, 4, 8, 16]

Exercice 10

Créer les listes suivantes:

  1. [1, 2, 3, 4, ..., 98, 99]
  2. [1, 3, 5, ..., 97, 99]
  3. [0, 3, 6, ..., 96, 99]
  4. [1, 0.5, 0.33333333, 0.25, 0.2, ...., 0.01 ]
  5. [1, -1, 1, -1, 1, ..., 1, -1] (de longueur 100)
  1. [i for i in range(1, 100)]
  2. [i for i in range(1, 100, 2)]
  3. [i for i in range(0, 100, 3)]
  4. [1 / i for i in range(1, 101)]
  5. [(-1) ** i for i in range(100)]

Exercice 11

foo = [[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12],[13, 14, 15, 16]]

  1. Que retournera foo[3]? foo[3][0]? foo[0][3]?
  2. Comment sera la liste foo après l'éxécution de la ligne foo[2][1] = 5 ?
  1. foo[3] retourne [13, 14, 15, 16].

    foo[3][0] retourne 13.

    foo[0][3] retourne 4.

  2. [[1, 2, 3, 4],[5, 6, 7, 8],[9, 5, 11, 12],[13, 14, 15, 16]]

Exercice 12

  1. Créer une liste de listes grille correspondant à la grille suivante:

Grille logique Antimorpion

On représentera les cercles par le chiffre 0, les croix par le chiffre 1 et les cases vides par None.

  1. Quelle instruction écrire pour modifier le premier cercle en une croix ?
  2. Ecrire une fonction efface(grille)prenant en paramètre une grille carrée de taille 5 et la vidant.
  1. grille = [[1, 0, None, None, 0], 
        [None, None, 1, 1, None], 
        [0, None, 1, 1, 1], 
        [None, 0, None, None, 0], 
        [0, 0, None, None, 1]]
    
  2. grille[0][1] = 1
  3. def efface(grille):
        for i in range(len(grille)):
            for j in range(len(grille[i])):
                grille[i][j] = None
    

Exercice 13

Ecrire une fonction somme(mat1, mat2) prenant en paramètre deux listes de listes de même taille et retournant une liste de liste de même taille ou chaque valeur est somme des valeurs de mat1 et mat2.

Voici une doctest correspondante.

>>> somme([[0,1],[1,0]],[[1,0],[0,1]])
[[1,1],[1,1]]
>>> somme([[0,1,2],[3,4,5]],[[1,1,1],[1,1,1]])
[[1,2,3],[4,5,6]]
def somme(mat1, mat2):
    lst = [[None] * len(mat1[i]) for i in range(len(mat1))]
    for i in range(len(mat1)):
        for j in range(len(mat1[i])):
            lst[i][j] = mat1[i][j] + mat2[i][j]
    return lst

OU

def somme(mat1, mat2):
    lst = []
    for i in range(len(mat1)):
        souslst = []
        for j in range(len(mat1[i])):
            souslst.append(mat1[i][j] + mat2[i][j])
        lst.append(souslst)                
    return lst