Vous êtes sur la page 1sur 5

Révision : Gestion de fichiers

Exercice 1 Messaoud Hamdi – My Prepa

Une molécule est un regroupement d’au moins deux atomes qui sont unis par des
liens chimiques et elle est représentée par une formule chimique. Exemple : H2O.
Une formule chimique est une succession de symboles d’atomes, suivi chacun par
un entier représentant le nombre d’apparitions(nbr) de l’atome dans la molécule.
Chaque atome est symbolisé par la première lettre de son nom en majuscule, suivie
éventuellement d’une deuxième lettre en minuscule pour distinguer des atomes
ayant des initiales identiques. Ainsi, le Fluor(F) se distingue de Fer(Fe),
du Fermium(Fm) et du Francium(Fr).
Le calcul de la masse molaire moléculaire d’une molécule, notée M(Molécule),
sera comme suit :
• Pour chaque atome de la molécule, calculer le produit (nbr * A(atome))
ou A(atome) est un réel représentant la masse atomique de l’atome ;
• Calculer la somme des produits obtenus.
Exemple

Pour la molécule dichromate de potassium (K2Cr2O7) qui est constituée de 2


atomes de potassium(K), 2 atomes de chrome(Cr) et 7 atomes d’oxygène(O), sa
masse molaire moléculaire M(K2Cr2O7) est égale à 2*A(K)+2*A(Cr)+7*A(O).
Puisque A(K)=39,1 g/mol, A(Cr)=52 g/mol et A(O)=16
g/mol, alors M(K2Cr2O7)=2*39,1+2*52+7*16=294,2 g/mol
Travail demandé :
En disposant d’un fichier texte ‘Molécules.txt’ dont chaque ligne contient le nom
d’une molécule suivi de sa formule chimique, séparés par le caractère astérisque
‘*’.
1. Ecrire une fonction remplireAtome() qui permet de remplir le fichier
‘Atomes.txt’ par les données relatives à N atomes (N<=50), ou chacun
est représenté par son symbole et sa masse atomique,
2. Ecrire un fonction masseAtome() qui permet de stocker dans un fichier
‘Resultats.txt’ le nom et la masse molaire moléculaire de chaque
molécule figurant dans le fichier ‘Molecules.txt’.

1|Page
Solution :
def remplireAtome(N):
f = open('Atomes.txt', 'a')
for i in range(N):
atome = input('saisir le nom d’atome')
masse = input('saisir la masse molaire')
ligne = atome+' * '+masse + '\n'
f.write(ligne)
f.close()

def dictionnaire(fichier):
code = open(fichier)
dic = {}
for i in code:
c = i.strip()
l = c.split(' ')
cle = l[0]
dic[cle] = l[1]
code.close()
return dic

def massAtome():
dic = dictionnaire('Atomes.txt')
source = open('Molecules.txt')
dest = open('Resultats.txt', 'a')
for ligne in source:
c = ligne.strip()
l = c.split('*')
atome = ''
nb = ''
estnombre = False
masse = 0
for lettre in l[1]:
if 'A' <= lettre <= 'Z' or 'a' <= lettre <= 'z':
if estnombre == True:
masse += int(dic[atome])*int(nb)
atome = ''
nb = ''
estnombre = False
atome += lettre
else:
estnombre = True
nb += lettre
masse += int(dic[atome])*int(nb)
dest.write(l[1]+':'+str(masse)+'\n')
remplireAtome(5)
massAtome()

2|Page
Exercice 2

Soit un fichier typé intitulé concours.txt qui comporte les enregistrements relatifs aux
candidats d’un concours. Chaque enregistrement est composé de : NCIN, NOM,
PRENOM, AGE, DECISION : (type contenant les identificateurs suivants : admis, refusé,
ajourné), et séparé par point virgule (;).
Travail demandé :

1. Définir la fonction saisir() qui permet de remplir les données relatives aux
candidats dans le fichier concours.txt
2. Définir la fonction admis() qui permet créer le fichier admis.txt comportant les
données relatives aux candidat admis
3. Afin de sélectionner en priorité les candidats admis et âgés moins de 30 ans,
créer la fonction attente() qui produira à partir du fichier admis.txt, un nouveau
fichier intitulé attente.txt comportant les données relatives aux candidats
admis et âgés plus que 30 ans. Une ligne du fichier attente.txt comprend
le NCIN, le NOM et PRENOM d’un candidat séparés par point virgule (;).
4. Définir la fonction statistiques(dec) qui permet de retourner le pourcentage
des candidats pour la décision dec (admis, refusé et ajourné). Exemple :
Le
pourcentage des candidats admis = (Nombre des candidats admis / Nombre
des candidats) *100
5. Définir la fonction supprimer() qui supprimera du fichier admis.txt les candidat
âgés plus que 30
N.B : On suppose que les fichiers seront mis à la racine du lecteur C.

3|Page
Solution :

def saisir():
new = "O" # O -> oui ; N -> non
fichier = open("concours.txt", "a")
decision = {"a": "admis(e)", "r": "refuse(e)", "aj": "ajourne(e)"}
while new == "O":
cin = input("Saisir le Numero CIN : ")
nom = input("Saisir le Nom : ")
prenom = input("Saisir le prenom : ")
age = input("saisir l age ")
dec = input("saisir la decision a(admis(e))
r(refuse(e))
aj(ajourne(e)): ")
ligne = cin+";"+nom+";"+prenom+";"+age+";"+decision[dec]+"\n"
fichier.write(ligne)
new = input("Saisir un nouveau candidat, (O / N) ?")
fichier.close()

def admis():
fichier = open("concours.txt")
dest = open("admis.txt", "a")
for ligne in fichier:
L = ligne.split(";")
if L[4].strip() == "admis(e)":
dest.write(ligne)
fichier.close()
dest.close()

def attente():
fichier = open("admis.txt")
dest = open("attente.txt", "a")
for ligne in fichier:
L = ligne.split(";")
if int(L[3]) >= 30:
enreg = L[0]+";"+L[1]+";"+L[2]+"\n"
dest.write(enreg)
fichier.close()
dest.close()

def statistiques(dec):
fichier = open("concours.txt")
L = fichier.readlines()
fichier.close()
L1 = [] # candidats admis

4|Page
L2 = [] # candidats refuses
L3 = [] # candidats ajournes
for ligne in L:
L = ligne.split(";")
if L[4].strip() == "admis(e)":
L1.append(ligne)
elif L[4].strip() == "refuse(e)":
L2.append(ligne)
else:
L3.append(ligne)
if dec == "admis":
return (len(L1)/len(L))*100
elif dec == "refuse":
return (len(L2)/len(L))*100
else:
return (len(L3)/len(L))*100

def supprimer():
fichier = open("admis.txt")
candidat = [] # contient les candidats restants
for ligne in fichier:
L = ligne.split(";")
if int(L[3]) < 30:
candidat.append(ligne)
fichier.close()
# reecrire la nouvelle liste
fichier = open("admis.txt", "w")
fichier.writelines(candidat)
fichier.close()

5|Page

Vous aimerez peut-être aussi