Listes et matrices : exercices premières approches des tuples et des ensembles 1. Filtrer les nombres pairs Écrivez une fonction filtrer_nombres_pairs qui, à partir d'une liste de nombres entiers, renvoie une nouvelle liste contenant uniquement les nombres pairs. Exemple d'utilisation : nombres = [3, 8, 15, 24, 42, 55] print(filtrer_nombres_pairs(nombres)) Résultat : [8, 24, 42] 2. Somme sur des listes avec un critère Écrivez une fonction somme_positifs qui, à partir d'une liste de nombres entiers, renvoie la somme des éléments positifs. Exemple d'utilisation : nombres = [-3, 5, -1, 12, 0, 8] print(somme_positifs(nombres)) Résultat : 25 3. Introduction aux tuples : Première approche : un tuple, c'est une liste non modifiable. t=(1, 2, 3) t[1] vaut 2 for val in t: print(val) t[1]=5 : bug ! => non modifiable t.append(4) : bug ! => non modifiable Ecrivez une fonction prenant une liste comme paramètre et retournant un 2-uple (on appelle ça un couple) constitué du plus petit et du plus grand élément de la liste. 4. Introduction aux ensembles : Première approche : un ensemble, c'est une liste sans doublon. ens={1, 2, 3} ou ens=set({1, 2, 3}) ou ens = set([1, 2, 3]) On peut tranformer un ensemble en liste et vice-versa l=list(ens) ens2=list(l) Si on transforme une liste en ensemble, ça supprime les doublons. l=[1, 2, 2, 3, 1] ens=set(l) # {1, 2, 3} on peut faire des operations ensemblistes sur les ensembles: e1.union(e2) # réunion de tous les éléments de e1 et e2, sans doublon e1.intersection(e2) # les éléments de e1 aussi dans e2 e1.difference(e2) # les élemnents de e1 pas dans e2 ens.add(5) : ajoute 5 ens.remove(5) : supprime le 5 pas de modification possible (pour modifier, on supprime et on ajoute) Exercice : Vous disposez de deux groupes de participants à deux événements différents. Il n'y a pas de doublons dans ces listes. Vous devez déterminer : La liste de ceux qui ont participé aux deux événements. La liste de ceux qui n'ont participé qu'à un seul des événements La liste complète des participants aux deux événements. Écrivez 3 fonctions pour répondre à ce problème. On utilise des ensembles : c'est une liste sans doublons. Exemple d'utilisation : evenement1 = ["Alice", "Bob", "Charlie"] evenement2 = ["Charlie", "David", "Eve"] print(participants_commun(evenement1, evenement2)) Résultat : ['Charlie'] print(participants_unique(evenement1, evenement2)) Résultat : ['Bob', 'David', 'Alice', 'Eve'] print(tous_les_participants(evenement1, evenement2)) Résultat : ['Alice', 'Bob', 'Charlie', 'David', 'Eve'] 5 - tri à bulles le tri à bulles consiste à inverser 2 valeurs successives d'une liste en mettant la plus grande en 2ème, pour toutes les valeurs d'une liste, du début à la fin. Après un parcours, le plus grand est en bas. On répète l'opération autant de fois que nécessaire. Ensuite, on peut optimiser en réduisant le nombre de boucles. Et optimiser en arrêtant quand le tableau est trié. Essayer de comprendre l'algorithme et coder le. 6. Trier une liste de 10 valeurs donnée aléatoirement entre 1 et 100 Quel est le maximum de cette liste Quel est le minimum de cette liste Quelle est la somme des nombres de cette liste Quelle est la moyenne des nombres de cette liste Inverser l'ordre de la liste (reverse ou slice -1) 7. Créer une liste avec 10 lettres minuscules au hasard. 8. Ecrivez une fonction qui renvoie toutes les caractères d'un texte, sans doublon, triées par ordre alphabétique, en minucules. La méthode lower() met en minuscule Faites une variante qui renvoie uniquement les lettres de l'alphabet. La methode isalpha() permet de savoir si un caractère est une lettre Variante: on compte le nombre d'occurrences de chaque lettre La lettre et le nombre d'occurrences sont mises dans un tuple On retourne une liste triée par lettre : [('a', 9), ('b', 3), ('c', 5), etc. Variante : On fait une 2è version qui retourne une liste triée par occurrences et par lettre : [(24, 'e'), (18, 'n'), ..., (1, 'z'), (1, 'x'), (1, 'f')] .sort(reverse=True) Variante : on veut ..., (1, 'f'), (1, 'x'), (1, 'z')] cherchez la solution ------------------------------------------------------------------------- Matrices tableau lignes-colonnes : nl, nombre de ligne, nc, nombre de colonnes mat=[ [1, 2, 3], [4, 5, 6] ] nl=len(mat) nc=len(mat[0]) parcours d'une matrice: for i in range(nl): print("ligne: ", i) for j in range(nc): print("élément: ", mat[i][j]) affichage basique: for ligne in matrice: print(ligne) initialisation d'une matrice : mat=[] for i in range(nl): mat.append([]) for j in range(nc): mat[i].append(1) version compacte : mat = [0 for _ in range(nc)] for _ in range(nl)] mat.1 Ecrire une fonction qui crée une matrice nl lignes et nc colonnes avec des valeurs comprises entre 0 et 9 (compris) Affichez la matrice commme ça : [1, 2, 3] [4, 5, 6] mat.2 Ecrire une fonction qui renvoie la moyenne des entiers positifs d'une matrice mat.3 Ecrire une fonction qui affiche une matrice en séparant les valeurs d'une ligne par des virgules : 1, 2, 3 4, 5, 6 mat.4 Ecrire une fonction qui affiche une matrice comme une table excel avec des numéros pour les colonnes et pour les lignes (on considère dans un premier temps que nl et nc sont < 10 et que les valeurs sont < 10 : | 0 | 1 | 2 | ------------- 0 | 1 | 2 | 3 | 1 | 4 | 5 | 6 | ------------- on fait ça pour toute matrice (pour tout nl et nc) et pour toute valeur entière. pour récupérer facilement le max des colonnes mat.5 Ecrire une fonction redresse_matrice() qui retourne une matrice "redressée" d'une matrice fournie : 1, 2, 3 4, 5, 6 devient 1, 4 2, 5 3, 6 mat.6 On fait une version du 5.3 qui travaille avec n'importe quelle valeur. On peut aussi cherche le plus grand nombre par colonne (index compris). C'est compliqué par colonne mais facile par lignes : nn utilise la fonction redresse_matrice()