Aide en python

kazute Messages postés 109 Date d'inscription   Statut Membre Dernière intervention   -  
kazute Messages postés 109 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai un programme en python à faire (pour gérer les stock d'un magasin) et j'ai un problème pour une fonction.

Je vous donne ici l'énoncé suivis des fonctions de mon programme :

Dictionnaires :
lesPrix = {"perçeuse":60,"ampoule":3.5,"clous":1.99,"vis":2.20}
leStock = {"perçeuse":15,"ampoule":75,"vis":300,"clous":400}
lesDepts = {"quincaillerie":leStock,"outillage":{"perçeuse":5,"visseuse":8}}

Q1 : ""Spécifier puis ´ écrire une fonction ´ informations stocks qui retourne, a partir des prix des `
articles et du nombre d’articles en rayon, les trois informations suivantes (dans l’ordre indique) : ´
— le montant total de marchandises en rayon;
— le nbre total d’articles en rayon;
— le prix moyen d’un article.
On considerera qu’un article en rayon dont on ne conna ` ˆıt pas le prix coute 1 euro; s’il n’y a pas d’articles ˆ
en rayon, le prix moyen d’un article est zero

Note : On peut retourner un tuple facilement avec l’operateur ´ , : si a, b et c sont trois variables
dans une fonction, l’instruction return a,b,c retourne un tuple compose de leurs trois valeurs. ""

def informations_stocks(stock,prix):

    total = 0
    articles = 0
    for i in stock:
        if i in prix:
            total+= stock[i] * prix[i] 
        else:
            total += stock[i]
        articles += stock[i]        
    moyen = total / articles    
    return total,articles,moyen



Q2 "". Specifier puis ´ ecrire une fonction ´ info depts qui retourne les trois informations prec´ edentes ´
pour chaque departement.""

def info_depts(dept,prix):
    dic = {}
    for i in dept:
        dic[i] = informations_stocks(dept[i],prix)        
    return dic


Jusque là, mes fonctions fonctionnent parfaitement.

Mais à partir de là l'énoncé dit :

""Specifier puis ´ ecrire une fonction ´ index articles qui retourne, pour chaque article, les departements ´
dans lesquels ont peut le trouver.
Exemple :
>>> index_du_magasin = index_articles(lesDepts)
>>> index_du_magasin
{’ampoule’: [’quincaillerie’], ’vis’: [’quincaillerie’],
’perc¸euse’: [’quincaillerie’, ’outillage’],
’visseuse’: [’outillage’], ’clous’: [’quincaillerie’]}""


Voici ce que j'ai fait :
def index_articles(dept):
    dic = {}
    for i in leStock:
        for key in dept.items():
            dic[i] = leStock[i]
            dic[i] = key #dept[j]
    return dic

Seulement ce qui est demandé (exemple à l'appui) ne correspond absolument pas à ce que j'ai en utilisant ma fonction :

Exemple :
>>> index_du_magasin = index_articles(lesDepts)
>>> index_du_magasin
{’ampoule’: [’quincaillerie’], ’vis’: [’quincaillerie’],
’perçeuse’: [’quincaillerie’, ’outillage’],
’visseuse’: [’outillage’], ’clous’: [’quincaillerie’]}


Si vous pouviez corriger ma fonction ou me donner une fonction qui fait ce qui est demandé, cela m'arrangerais énormément ! (en expliquant bien sur ce que vous avez fait pour m'aider à comprendre).

J’espère que j'ai été assez clair et je vous remercie à l'avance pour vos réponses.

Cordialement,

EDIT : Déplacement de la discussion dans le bon forum ET ajout des balises de code !

1 réponse

soldo
 
Bonsoir.

Teste ceci :

for key in dept.items(): print(key)


for key in dept.keys(): print(key)


for key in dept: print(key)


for value in dept.values(): print(value)


Cela te permettra de comprendre ton erreur.
0
kazute Messages postés 109 Date d'inscription   Statut Membre Dernière intervention   20
 
Bonsoir,

Tout d'abord, merci pour ces aides qui m'ont permis d'un peut mieux comprendre (je n'avais pas connaissance des .keys et .values) Mais je n'y arrive toujours pas:

voilà mon code :

def index_articles(dept):
    dic = {}
    for i in leStock:
        for key2 in dept.keys():
            for value in dept.values():
        #for j in lesDepts:
                dic[i] = leStock[i]
                if dic[i] == value:
                    dic[i] = key2 #dept[j]
                else :
                    dic[i] = key
    return dic



Je me retrouve avec:

{'perçeuse': 'outillage', 'ampoule': 'outillage', 'vis': 'outillage', 'clous': 'outillage'}


Lorsque je lance la fonction, je n'arrive pas a faire spécifier le fait que l'outil se trouve dans outillage ou dans la quincaillerie.

Si vous avez d'autres pistes je suis preneur.
0
soldo > kazute Messages postés 109 Date d'inscription   Statut Membre Dernière intervention  
 
L'exercice demande d'utiliser uniquement les départements, pas le stock, donc la fonction doit recevoir en paramètre les départements, les parcourir afin de grouper les départements selon les articles.

def index_articles(depts):
    articles = {} # article en clé, departments en valeurs
    # Parcours des departments et de leurs stocks
    for dept, stock in depts.items():
        # Parcours des articles du département
        for article in stock:
            # Si l'article n'existe pas dans le dict. articles
            # On le crée avec pour valeur une liste
            if article not in articles:
                articles[article] = []
            # Ajout du départ. à la liste
            articles[article].append(dept)
    return articles

             
# Affichage
for art, depts in index_articles(lesDepts).items():
    print(art, depts)
0
kazute Messages postés 109 Date d'inscription   Statut Membre Dernière intervention   20
 
Bonjour, je vous remercie vivement pour votre aide !

j'ai pu avancer dans mes exercices et je suis de nouveau bloqué à une question :

Specifier puis ´ ecrire une fonction ´ permuteListe(uneListe) qui echange successi- ´
vement chaque el´ ement de la liste (l’ ´ el´ ement au rang 0, puis au rang 1, puis . . .) avec un autre ´ el´ ement ´
de la liste choisi au hasard. La liste doit pouvoir contenir n’importe quel type d’el´ ement. La liste donn ´ ee´
en parametre est modifi ` ee par cette fonction

Voici mon programme :
def permuteListe(uneListe):
    
    for i in range(len(uneListe)):
        x = randint(1, len(uneListe)-1)
        move1 = uneListe[x]        
        uneListe[x] = uneListe[i]
        uneListe[i] = move1
    return uneListe


Jusque là ça marche mais la question suivante est problématique :

A l’aide de la fonction précédente, spécifier puis ´ écrire une fonction ´ dictPerm() qui
fabrique et retourne un dictionnaire de permutation (tire au hasard) pour les lettres majuscules

Exemple d’utilisation :
> perm = dictPerm()
> perm
{’Z’: ’A’, ’X’: ’N’, ’Y’: ’E’, ’V’: ’J’, ’W’: ’H’, ’T’: ’L’, ’U’: ’C’,
’R’: ’O’, ’S’: ’Q’, ’P’: ’V’, ’Q’: ’Y’, ’N’: ’M’, ’O’: ’U’, ’L’: ’F’,
’M’: ’K’, ’J’: ’I’, ’K’: ’R’, ’H’: ’T’, ’I’: ’B’, ’F’: ’Z’, ’G’: ’W’,
’D’: ’P’, ’E’: ’G’, ’B’: ’X’, ’C’: ’D’, ’A’: ’S’}

Pour cette question, vous utiliserez la variable ascii_uppercase du module string qui contient
la chaîne de caractères des lettres de l’alphabet en majuscules .

Voici mon programme :
def dicPerm():
    ALPHABET = string.ascii_uppercase
    dic =  {}
    for i in range(len(ALPHABET)):
        dic[ALPHABET[i]] = ALPHABET[i]
    print(dic)


je voudrais savoir comment me servir (où placer le permuteListe) du programme précédent pour mélanger les lettres dans le dictionnaire.

Cordialement,
0