Aide en python
kazute
Messages postés
120
Statut
Membre
-
kazute Messages postés 120 Statut Membre -
kazute Messages postés 120 Statut Membre -
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. ""
Q2 "". Specifier puis ´ ecrire une fonction ´ info depts qui retourne les trois informations prec´ edentes ´
pour chaque departement.""
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 :
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,
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,
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 dicJe 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.
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)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 uneListeJusque 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,