Aide exerce Gestion stock PYTHON

Fermé
fleurdumat - 1 nov. 2019 à 21:53
 khrug - 2 nov. 2019 à 15:39
Bonjour, je dois effectuer un exercice mais j'ai quelques soucis.Je dois faire un menu qui me permet de gerer le stock de differents materiels donnés. Je dois creer differentes fonctions pour :
-entrer le stock
-le modifier
-classer le materiel dans un ordre croissant en fonctions du stock
-affichier les produit dont le stock est inferieur a 3 et le materiel inferieur a 10 pour les commander et afficher leur prix, nom fournisseur. J'ai essayer d'afficher le prix et nom avec print et dico[nom]["prix"] mais ça ne marchait pas
-sauvegarder les donnees dans une fichier
-charger les donnees.

Voici mon code:
def saisie_initiale(dico):
    for nom in dico.keys():
        print "nous allons saisir le stock de",nom
        print "quelle est quantite disponible"
        dico[nom]["qte_dispo"]=input()
    print dico
    return

def infocommande(dico):

    listobj=["flacons","lames","agitateurs","eprouvette","anticorps","oxygene","eau_distille"]

    listtype=["produit","produit","produit","materiel","materiel","materiel","materiel"]
    listprix=[1,9,6,3,4,55,29]
    listfournisseur=["TOT","fadg","RAC","PRO","floa","azs","ato"]
    listadresse=["231458","45574","451112","44558","445454","54554","545489"]
    listlot=["unitaire","unitaire","unitaire","unitaire","lot2","lot60","lot20"]

    for i in range(len(listobj)):
        nom=listobj[i]
        dico[nom]=dict()
        for cle in dico.keys():
            for i in range(len(listprix)):
                dico[cle]["type"]=listtype[i]
                dico[cle]["prix"]=listprix[i]
                dico[cle]["fournisseur"]=listfournisseur[i]
                dico[cle]["adresse_fournisseur"]=listadresse[i]
                dico[cle]["unite"]=listlot[i]
    
    return dico
          
def saisie_modif(dico):
    print "quel objet voulez vous modifier, veuillez taper: eau_distillee, oxygene, anticorps,eprouvettes,agitateurs,lames ou flacons"
    nom=raw_input()
    for i in range(len(listobj)):
        if nom==listobj[i]:
            nom=listobj[i]
    if dico[nom]["type"]=="materiel":
        print nom,"a un nouveau qte de:"
        nouv=input()
        dico[nom]["qte_dispo"]=nouv
    if dico[nom]["type"]=="produit":
        print nom,"a une nouveau vol de:"
        nouv=input()
        dico[nom]["vol_dispo"]=nouv
    return

def affichage(dico):
    liststock=[]
    sorted(dico.items(), key=lambda s: s[1])

def listcommande(dico):
    listcommande=[]
    for cle in dico.keys():
        if dico[cle]["type"]=="produit":
            if dico[cle]["qte_dispo"]<3:
                listcommand.append(cle)
        if dico[cle]["type"]=="materiel":
                
            if dico[cle]["qte_dispo"]<10:
                listcommand.append(cle)
    print listcommande
    return 

def ecrire(dico):
    nom="datastock.txt"
    fic=open(nom,"w")
    for cle in dico.keys():
        fic.write(cle)
        fic.write("\n")
        fic.write(str(dico[cle]["type"]))
        fic.write("\n")
        fic.write(str(dico[cle]["prix"]))
        fic.write("\n")
        fic.write(str(dico[cle]["fournisseur"]))
        fic.write("\n")
        fic.write(str(dico[cle]["adresse_fournisseur"]))
        fic.write("\n")
        fic.write(str(dico[cle]["qte_dispo"]))
        fic.write("\n")
        fic.write(str(dico[cle]["unite"]))
        fic.write("\n")                
    fic.close()

def lire(dico):
    nom="datastock.txt"
    fic=open(nom,"r")
    ligne=fic.readline()
    while ligne !='':
        ligne=ligne.strip()
        cle=ligne
        ligne=fic.readline()
        ligne=ligne.strip()
        dico[cle]["type"]=str(ligne)
        ligne=fic.readline()
        ligne=ligne.strip()
        dico[cle]["prix"]=int(ligne)
        ligne=fic.readline()
        ligne=ligne.strip()
        dico[cle]["fournisseur"]=str(ligne)
        ligne=fic.readline()
        ligne=ligne.strip()
        dico[cle]["adresse_fournisseur"]=str(ligne)
        ligne=fic.readline()
        ligne=ligne.strip()
        dico[cle]["qte_dispo"]=int(ligne)
        ligne=fic.readline()
        ligne=ligne.strip()
        dico[cle]["unite"]=str(ligne)
        ligne=fic.readline()
    fic.close()
        
        
        
def affiche_menu():
    print"Taper 1 pour saisir votre stock"
    print"Taper 2 pour modifier votre stock"
    print"Taper 3 pour afficher les objets du stock plus petit au plus grand"
    print"Taper 4 pour afficher la liste des commandes a faire"
    print"Taper 5 pour sauver"
    print"Taper 6 pour charger"

dico={}
listobj=["eau_distille","oxygene","anticorps","eprouvette","agitateurs","lames","flacons"]
while 1:
    affiche_menu()
    
    print "Quel est votre choix"
    rep=input()
    
    if rep==1:
        infocommande(dico)
        saisie_initiale(dico)
    elif rep==2:
        saisie_modif(dico)
    elif rep==4:
        listcommande(dico)
        
    elif rep==5:
        ecrire(dico)
    elif rep==6:
        lire(dico)


J'ai quelques pbs:
-mon dictionnaire ne contient que la premiere variable de chaque list...je n'arrive pas a creer une iteration correcte avec la fonction infocommande
-je n'arrive pas a charger mes donnees a partier du fichiers
-je ne vois pas comment faire pour ordonner les valeur de quantité dans un dictionnaire avec des dictionnaires dedans..

J'ai beaucoup de mal a bien faire tourner mon programme, j'espere que vous pourrais m'aider

MERCI !!!

1 réponse

Bonjour,

Il faudrait dire à ton prof de se mettre à jour en faisant travailler ses élèves avec python3.

Sinon, réfléchis à ce que tu fais, chaque fois que tu ajoutes un item au dictionnaire, tu parcours tout le dictionnaire pour changer toutes les valeurs (du dico) à la dernière lue de tes listes.

Tu n'as besoin d'itérer que sur le nombre d'éléments de tes listes.

def infocommande(dico):

    listobj=["flacons","lames","agitateurs","eprouvette","anticorps","oxygene","eau_distille"]

    listtype=["produit","produit","produit","materiel","materiel","materiel","materiel"]
    listprix=[1,9,6,3,4,55,29]
    listfournisseur=["TOT","fadg","RAC","PRO","floa","azs","ato"]
    listadresse=["231458","45574","451112","44558","445454","54554","545489"]
    listlot=["unitaire","unitaire","unitaire","unitaire","lot2","lot60","lot20"]

    for i, objet in enumerate(listobj):
        dico[objet] = dict()
        dico[objet]["type"] = listtype[i]
        dico[objet]["prix"] = listprix[i]
        dico[objet]["fournisseur"] = listfournisseur[i]
        dico[objet]["adresse_fournisseur"] = listadresse[i]
        dico[objet]["unite"] = listlot[i]


Pour le problème de ton fichier, que contient-il, j'ai pas envie d'essayer d'analyser comment tu l'as écrit.

Pour le problème de tri, les dictionnaires sont des structures non ordonnées, si tu veux obtenir un tri selon une clé, il faudra définir ta fonction de tri ou alors utiliser quelque chose de plus simple comme la fonction itemgetter du module operator et la passer à sorted.
0