Aide en python

Fermé
kazute Messages postés 109 Date d'inscription samedi 9 avril 2016 Statut Membre Dernière intervention 12 novembre 2020 - Modifié le 11 janv. 2019 à 20:07
kazute Messages postés 109 Date d'inscription samedi 9 avril 2016 Statut Membre Dernière intervention 12 novembre 2020 - 12 janv. 2019 à 15:51
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

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 samedi 9 avril 2016 Statut Membre Dernière intervention 12 novembre 2020 20
11 janv. 2019 à 22:25
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 samedi 9 avril 2016 Statut Membre Dernière intervention 12 novembre 2020
12 janv. 2019 à 00:13
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 samedi 9 avril 2016 Statut Membre Dernière intervention 12 novembre 2020 20
12 janv. 2019 à 15:51
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