Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Correction code Python

2 réponses
Avatar
Hugues21
Bonjour,
J'aimerais que vous m'aidiez à corriger ce code :

import cPickle as pickle
import os.path

NOMFIC_SAUVE = "carnet.pickle"
QUIT_CONFIRMER = "Vous confirmez vouloir quitter (O/N) ?"
INSTRUCTIONS = """

*********************************************
Application Carnet d'Adresses
V 1.0
*********************************************

Tapez une des quatre touches suivantes :
A pour Ajouter une personne
L pour la Liste des fiches du carnet
I pour revoir ces Instructions
Q pour Quitter. """
PATRON_LISTE = "%s %s Naissance: %s Email: %s"

class CarnetAdr(object):
def __init__(self):
self.gens =[]

def ajouter_fiche(self, fiche_nouvo):
self.gens.append(fiche_nouvo)

def sauver(self):
with open(NOMFIC_SAUVE, 'w') as ficow:
pickle.dump(self, ficow)

class FicheAdr(object):
def __init__(self, prenom=None, nomfami=None, datenaiss=None, courriel=None):
self.prenom = prenom
self.nomfami = nomfami
self.datenaiss = datenaiss
self.courriel = courriel

def __repr__(self):
patron = "FicheAdr(prenom ='%s',"+
"nomfami ='%s',"+
"datenaiss ='%s',"+
"courriel ='%s')"
return patron%(self.prenom,self.nomfami,self.datenaiss,self.courriel)

class Kontroleur(object):
def __init__(self):
self.carnet_adr = self.charger()
if self.carnet_adr is None:
self.carnet_adr = CarnetAdr()
self.gerer_menu()

def charger(self):
if os.path.exists(NOMFIC_SAUVE):
with open(NOMFIC_SAUVE, 'r') as ficor:
return pickle.load(ficor)
else:
return None

def gerer_menu(self):
print(INSTRUCTIONS)
while True:
cmd = raw_input("n(a)jout'(l)iste,(i)nstr.,(q)uitter : ")
if cmd == "a":
self.ajouter_fiche()
elif cmd == "q":
if confirmer_quitter():
print("Sauvegarde")
self.carnet_adr.sauver()
print("Fin de l'application")
break
elif cmd == "i":
print(INSTRUCTIONS)
elif cmd == "l":
self.lister_fiches()
else:
modele = "*** Touche de commande inconnue (%s) !"
print(modele%cmd)

def ajouter_fiche(self):
print("Ajout d'une fiche dansle carnet")
print("Description de la personne :")
prenom = raw_input("Son prenom ? ")
if prenom == "q":
print("On abandonne !")
return
nomfami = raw_input("Son nom de famille ? ")
if nomfami == "q":
print("On abandonne !")
return
M_DATENAISS = "Sa date de naissance (Jour/Mois/An) ? "
datenaiss = raw_input(M_DATENAISS)
if datenaiss == "q":
print("On abandonne !")
return
courriel = raw_input("Son @dresse ? ")
if courriel == "q":
print("On abandonne !")
return
nfiche = FicheAdr(prenom, nomfami, courriel, datenaiss)
self.carnet_adr.ajouter_fiche(nfiche)
ncontact = (prenom, nomfami)
print("Nouvelle fiche faite pour %s %s. n"%ncontact)

def lister_fiches(self):
print("nListe des personnes")
for indice, e in enumerate(self.carnet_adr.gens):
contact = (e.prenom, e.nomfami, e.datenaiss, e.courriel)
fiche = PATRON_LISTE%contact
print("%s: %s"%(indice + 1, fiche))

def confirmer_quitter():
confi = raw_input(QUIT_CONFIRMER)
if confi == 'n':
return False
else:
return True

if __name__ == "__main__":
controleur = Kontroleur()



Quand j'execute ce programme, il m'affiche :

Traceback (most recent call last):
File "Carnet d'Adresse WIP.py", line 119, in <module>
controleur = Kontroleur()
File "Carnet d'Adresse WIP.py", line 47, in __init__
self.carnet_adr = self.charger()
File "Carnet d'Adresse WIP.py", line 55, in charger
return pickle.load(ficor)
EOFError

2 réponses

Avatar
Benoit Izac
Bonjour,
Le 14/05/2018 à 09:22, Hugues a écrit dans le message
 :
J'aimerais que vous m'aidiez à corriger ce code :
[...]
with open(NOMFIC_SAUVE, 'w') as ficow:
pickle.dump(self, ficow)
[...]
with open(NOMFIC_SAUVE, 'r') as ficor:
return pickle.load(ficor)

Si tu es sous Windows, je pense qu'il faut utiliser 'rb' pour ouvrir le
fichier.
NB : je n'ai pas regardé le reste.
--
Benoit Izac
Avatar
yves
Le Mon, 14 May 2018 02:22:31 -0500, Hugues21 a écrit:
Bonjour,
J'aimerais que vous m'aidiez à corriger ce code

Ce code fonctionne sur mon installation (Ubuntu Linux).
@+
--
Yves