0% ont trouvé ce document utile (0 vote)
56 vues4 pages

TD4 Correction

Td

Transféré par

dembelejacob719
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
56 vues4 pages

TD4 Correction

Td

Transféré par

dembelejacob719
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

#**********************Correction TD*********************************

#********************************************************************
############Partie 1
#Question 1
class Etudiant :
Code = " "#chaîne vide
CIN = " "#chaîne vide
Nom = " "#chaîne vide
Prenom = " "#chaîne vide
Note=0.0#réel
#Question 2
def saisir_Etudiant(e):
e.Code = input("entrer le code de l'étudiant ")
e.CIN =input("entrer le CIN de l'étudiant ")
e.Nom=input("entrer le Nom de l'étudiant")
e.Prenom=input("entrer le prenom de l'étudiant ")
e.Note=float(input("entrer la note de l'étudiant "))
#Question 3
def afficher_Etudiant(e):
print("l'Etudiant : ")
print("*** Code = ", e.Code)
print("*** CIN = ", e.CIN)
print("*** Nom = ", e.Nom)
print("*** Prenom = ", e.Prenom)
print("*** Note = ", e.Note)
#Question 4
def liste_Etudiants(effectif):
T=[]
print("saisie de ", effectif, "étudiants ")
for i in range(effectif):
print("----Etudiant num ", i+1)
e=Etudiant()#créer un objet de type Etudiant
#Les champs de e ont les valeurs initiales
saisir_Etudiant(e)#appel de la procedure saisir_Etudiant()
T.append(e)#ajout de l'etudiant couant à la liste
#En sortant de la boucle for:
# T est rempli d'un nombre=effectif d'objets de type Etudiant,
#les champs chaque Etudiant ont été saisi au clavier,
#La saisi est effectuée grâce à la procedure saisir_Etudiant()
return T #la liste des étudiants est retourné par la fonction
#Question 5
def moyenne_section(liste):
n=len(liste)
if n==0:
print("liste vide!!")
return None
m=0.0
#On parcourt la liste des étudiants
for e in liste:
#On calcule la somme des notes des étudiants
m=m+e.Note
#En sortant de la boucle m contient la somme des notes
#on divise m sur le nombre des étudiants pour avoir la moy
return m/n #on retourne la moyenne
#Question 6
def taux_validation(liste):
n=len(liste)
if n==0:
print("liste vide!!")
return None
t=0.0
#On parcourt la liste des étudiants
for e in liste:
#On calcule le nombre des étuadiants ayant une note>10
if e.Note>=10:
t=t+1
#nb des étudiants ayant une note>=10 sur nb total des étudiants
#on multiplie par 100 pour retourner un pourcentage de validation
return 100*t/n
#Question 7
def supprimer_Etudiant(CIN,liste):
#On parcourt la liste des étudiants
for e in liste:
#on cherche l'étudiant ayant le CIN en paramètre
if e.CIN==CIN:
#si on trouve le CIN, on supprime l'étudiant
liste.remove(e)
return None
#return est optionnel
#pour sortir de la procedure une fois l'étudiant trouvé

##############Partie 2
#Question 1
#version 1: en utilisant la méthode write()
def fichier_notes(liste,fich):
#ouvrir le fich en mode Ecriture 'w'
objfich=open(fich, 'w')
#parcourir la liste des etudiants
for e in liste:
#pour chaque Etudiant e:
#créer une chaîne=ligne contenant:
#le code suivi de 4 tabs suivis de la note
#la note est un réel, on fait la conversion avec str
#on ajoute un retour à la ligne à la fin
ligne=e.Code +"\t\t\t\t"+ str(e.Note)+"\n"
objfich.write(ligne)#on écrit la ligne avec write()
#la méthode write prend en paramètre une chaîne de caractère
#En sortant de la boucle, toutes les lignes sont écrites
#on ferme le fichier
objfich.close()
#version 2: en utilisant la méthode writelines()
def fichier_notes2(liste,fich):
#ouvrir le fich en mode Ecriture 'w'
objfich=open(fich, 'w')
#créer une liste des lignes
lignes=[]
#parcourir la liste des etudiants
for e in liste:
#pour chaque Etudiant e:
#créer une chaîne=ligne contenant:
#le code suivi de 4 tabs suivis de la note
#la note est un réel, on fait la conversion avec str
#on ajoute un retour à la ligne à la fin
une_ligne=e.Code +"\t\t\t\t"+ str(e.Note)+"\n"
#ajouter la ligne courante à la liste
lignes.append(une_ligne)
#En sortant de la boucle, toutes les lignes sont stockées dans la liste
objfich.writelines(lignes)#on écrit les lignes avec writelines()
#la méthode writelines prend en paramètre une liste de chaînes
#on ferme le fichier
objfich.close()

#Question 2
#version 1: En utilisant readline()
def chercher_note(code, fich):
#ouverture du fichier en mode lecture 'r'
objfich=open(fich, 'r')
#lire la première ligne avec readline()
ligne=objfich.readline()
#On utilise une boucle while pour lire ligne par ligne
#on arrive à la fin du fich quand la ligne lue est vide
while ligne!="":
#split permet de diviser une chaîne selon
#le séparateur passé en paramètre et retourne
#la liste des mots constituants la chaîne
contenu_ligne=ligne.split("\t\t\t\t")#liste des mots
if contenu_ligne[0]==code:#1ère chaine contient le code
objfich.close()#code trouvé? je ferme le fichier
note=contenu_ligne[1]#2ème chaine contient note suivi de \n
note=float(note[:-2])#enlever \n et convertir en float
return note
#ici le code n'est pas trouvé je lis la ligne suivante
ligne=objfich.readline()
#En sortant de la boucle while, tout le fich est lue
#la dernière ligne lue par readline() est vide
objfich.close()#on ferme le fichier
#ici j'ai lu tout le fichier et je n'ai pas trouvé le code
#sinon, la note a été retournée et je n'arriverai jamais ici
return None
#version 2: En utilisant readlinelines()
def chercher_note2(code, fich):
#ouverture du fichier en mode lecture 'r'
objfich=open(fich, 'r')
#lire toute les lignes avec readlines()
lignes=objfich.readlines()
#tout le contenu est stocké dans lignes,
objfich.close()#on ferme le fichier
#On utilise une boucle for pour parcourir les lignes
#readlines() retourne une liste des chaînes
#chaque chaîne dans la liste est une ligne du fichier
for e in lignes:
#split permet de diviser une chaîne selon
#le séparateur passé en paramètre et retourne
#la liste des mots constituants la chaîne
contenu_ligne=e.split("\t\t\t\t")#liste des mots
if contenu_ligne[0]==code:#1ère chaine contient le code
note=contenu_ligne[1]#2ème chaine contient la note suivi de \n
note=float(note[:-2])#enlever \n et convertir en float
return note
#En sortant de la boucle for,
#ici j'ai parcouru toutes les lignes et je n'ai pas trouvé le code
#sinon, la note a été retournée et je n'arriverai jamais ici
return None
#version 3: En utilisant read()
def chercher_note3(code, fich):
#ouverture du fichier en mode lecture 'r'
objfich=open(fich, 'r')
#lire tout le contenu avec read()
contenu=objfich.read()
#tout le contenu est stocké dans une seule chaîne: contenu,
#on ferme le fichier
objfich.close()
#on divise la chaîne contenu avec split et le séparateur="\n"
#pour obtenir une liste des lignes
lignes=contenu.split("\n")
#On utilise une boucle for pour parcourir les lignes
#chaque chaîne dans la liste est une ligne du fichier sans "\n"
for e in lignes:
#split permet de diviser une chaîne selon
#le séparateur passé en paramètre et retourne
#la liste des mots constituants la chaîne
contenu_ligne=e.split("\t\t\t\t")#liste des mots
if contenu_ligne[0]==code:#1ère chaine contient le code
note=contenu_ligne[1]#2ème chaine contient note (pas de \n)
note=float(note)#convertir en float
return note
#En sortant de la boucle for,
#ici j'ai parcouru toutes les lignes et je n'ai pas trouvé le code
#sinon, la note a été retournée et je n'arriverai jamais ici
return None
#Question 3
#En utilisant readline()
#On peut lire le fichier avec readlines() ou read() comme Question 9
def nombre_mentions(fich):
n=0#pour compter le nombre de mentions
objfich=open(fich, 'r')
ligne=objfich.readline()
while ligne!="":
#split permet de diviser une chaîne selon
#le séparateur passé en paramètre et retourne
#la liste des mots constituants la chaîne
contenu_ligne=ligne.split("\t\t\t\t")#liste des mots
note=contenu_ligne[1]#deuxième chaine contient la note suivi de \n
note=float(note[:-2])#enlever \n et convertir en float
if note>=12:
n=n+1#on incremente le nombre des notes>=12
ligne=objfich.readline()
objfich.close()
return n

#Partie3: Test

#Création liste Etudiants


effectif=int(input("entrer le nb d'étudiants"))
T=liste_Etudiants(effectif)
#Affichage de la liste des Etudiants
print("la liste des Etudiants est: ")
for e in T:
afficher_Etudiant(e)

#Affichage de la moy des notes


print("la moyenne des notes= ", moyenne_section(T))

#Affichage du taux de validation


print("le taux de validation= ", taux_validation(T),"%")

#Supprimer un Etudiant
c=input("entrer le CIN de l'étudiant à supprimer")
supprimer_Etudiant(c,T)

#Affichage de la liste après suppression


print("la liste des Etudiants est: ")
for e in T:
afficher_Etudiant(e)

#Création du fichier "notes.txt"


fichier_notes(T,"notes.txt")

#Affichage la note d’un étudiant donné par son code


code=input("entrer un code à chercher")
note=chercher_note2(code, "notes.txt")
print("la note de l'étudiant ayant le code = ",code, "est ",note )

#Affichage du nombre des mentions obtenues


nb_mentions=nombre_mentions("notes.txt")
print("le nombre des mentions obtenues= ",nb_mentions )

Vous aimerez peut-être aussi