################ ## ## ## Exercice 3 ## ## ## ################ ## Question 3.1 def afficher_fichier(s): f_in = open(s, 'r', encoding = 'utf-8') texte = f_in.read() f_in.close() print(texte, end ='') def afficher_fichier2(s): f_in = open(s, 'r', encoding = 'utf-8') liste_lignes = f_in.readlines() f_in.close() for ligne in liste_lignes: print(ligne, end = '') # ligne contient le retour à la ligne # Méthode déconseillé def afficher_fichier3(s): f_in = open(s, 'r', encoding = 'utf-8') while True: ligne = f_in.readline() if ligne=='': # Fin du fichier break else: print(ligne, end = '') # ligne contient le retour à la ligne f_in.close() def afficher_fichier4(s): f_in = open(s, 'r', encoding = 'utf-8') for ligne in f_in: print(ligne, end = '') # ligne contient le retour à la ligne print() f_in.close() # Il faut fermer le fichier après la boucle ## Question 3.2 ## Question 3.3 def afficher_fichier(s): try: f_in = open(s, 'r', encoding = 'utf-8') for ligne in f_in: print(ligne, end = '') # la chaîne ligne contient déjà le '\n' f_in.close() except FileNotFoundError: print('fichier', s, 'non trouvé.') ################ ## ## ## Exercice 4 ## ## ## ################ def nombre_lignes(s): try: fichier = open(s, 'r', encoding = 'utf-8') n = 0 # n=nombre de lignes lues for ligne in fichier: n = n+1 fichier.close() return n except FileNotFoundError: return -1 except PermissionError: return -1 ################ ## ## ## Exercice 5 ## ## ## ################ def majuscules(f) : f1 = f[0:len(f)-4] + '-maj' + '.txt' ancien = open(f, 'r', encoding = 'utf-8') nouveau = open(f1, 'w', encoding = 'utf-8') for ligne in ancien : nouveau.write(ligne.upper()) ancien.close() nouveau.close() ################ ## ## ## Exercice 6 ## ## ## ################ # Existe déjà c'est la fonction min def minimum(L): assert len(L)!=0 # On lève une exception si la liste est vide m=L[0] # L[0] est forcèment définie si le assert n'a pas levé d'exceptions for e in L: if em: m=e return m # En une ligne : return sum(L)/len(L) (seulement si L!=[]) def moyenne(L): assert len(L)!=0 # On lève une exception si la liste est vide s=0 # on calcul la somme des termes dans s for e in L: s=s+e return s/len(L) # len(L) est forcément différent de 0 # En une ligne : return sum([1 for e in L if e>10] * 100/len(L)) def pourcentage_admis(L): assert len(L)!=0 # On lève une exception si la liste est vide n=0 # on calcul le nombre d'admis dans n for e in L: if e>=10: n=n+1 return n/len(L)*100 # len(L) est forcément différent de 0 def affichage(L): # L = liste de triplets : texte, nombre, fin (% ou /20) # On calcule la plus longue description pour pouvoir aligner les notes. liste_description=[] for triplet in L: liste_description.append(triplet[0]) longueur_max = maximum(liste_decription) # On aurait pu simplement écrire : longueur_max = max([len(e[0]) for e in L]) for triplet in L: (description,nombre,unité)=triplet print('{: <{lg}} '.format(description, lg = longueur_max),end='') if type(nombre) == int: print(' {: >5}{}'.format(nombre,unité)) else: print(' {:5.2f}{}'.format(nombre,unité)) # La partie entière du nombre fait 2 caractères maximum (entre 0 et 20) # On choisit deux chiffres après la virgule # Si on ajoute le . de la virgule, cela fait 5 caractères # on prend 5 caractères pour gérer le taux 100%, def statistiques(L): # calculs statistiques m = minimum(L) M = maximum(L) moy = moyenne(L) taux_admission = pourcentage_admis(L) affichage([('Note la plus basse :',m, '/20'), ('Note la plus haute :',M, '/20'), ('Moyenne :', moy, '/20'), ("Taux d’admission :", taux_admission, '%')])