IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

dictionnaire et random


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2014
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2014
    Messages : 35
    Par défaut dictionnaire et random
    Bonsoir à tous,

    Depuis plusieurs heures, je cherche à créer un exercice que je mets en pièce jointe. untitled.py
    J'ai crée un dictionnaire {'métal' : densité, ...}
    Dans def réponse_cube() : je souhaiterais pouvoir récupérer la densité du métal qui a été choisi c'est ce que n'arrive pas à faire.

    Merci pour votre aide
    Pierre

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 743
    Par défaut
    Salut,

    Citation Envoyé par pir2Paris Voir le message
    J'ai crée un dictionnaire {'métal' : densité, ...}
    Certes mais à quoi bon si vous ne savez pas l'utiliser?
    Les dictionnaires sont une structure de base (et essentielle) au langage, tous les bons tutos vous en donnent le mode d'emploi dans un chapitre dédié.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Autres questions,

    • Pourquoi les 2 dictionnaires identiques dans le même code ?
    • Pourquoi mettre des accents à des noms de variables ?
    • Pourquoi mettre des mots clé global partout ?


    EDIT:

    Côté présentation, c'est plus agréable de représenter un dictionnaire de cette manière concernant votre cas,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    metaux={
            'fer': 7.9,
            'plomb': 11.4,
            'or': 19.3,
            'aluminium': 2.7,
            'cuivre': 9,
            'argent': 10.5,
            'zinc': 7.1
           }
    Vous pouvez aussi exprimer ce que vous souhaitez faire de ce résultat (placer dans un widget Label, Entry, Canvas, ... ? )

  4. #4
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2014
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2014
    Messages : 35
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Autres questions,

    • Pourquoi les 2 dictionnaires identiques dans le même code ?
    • Pourquoi mettre des accents à des noms de variables ?
    • Pourquoi mettre des mots clé global partout ?


    EDIT:

    Côté présentation, c'est plus agréable de représenter un dictionnaire de cette manière concernant votre cas,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    metaux={
            'fer': 7.9,
            'plomb': 11.4,
            'or': 19.3,
            'aluminium': 2.7,
            'cuivre': 9,
            'argent': 10.5,
            'zinc': 7.1
           }
    Vous pouvez aussi exprimer ce que vous souhaitez faire de ce résultat (placer dans un widget Label, Entry, Canvas, ... ? )
    Bonjour fred1599,

    Je vous remercie pour votre réponse.
    J'ai remanié le code en essayant de le simplifier :
    La présentation d'un dictionnaire sous cette forme ne me semble pas "meilleure" s'il y a moins d'une dizaine d'éléments, c'est tout aussi lisible ;
    il y a maintenant deux dictionnaires car j'ai séparé les métaux dont l'initiale est une voyelle de ceux dont l'initiale est une consonne pour une question de français (la densité de l'or, du cuivre).
    L'accent à "métaux" est-il vraiment si gênant que çà ?
    Concernant le mot-clé global, je fais un exercice "répétitif" pour mes élèves.
    Sans cela, j'aurai toujours le même exercice ou bien les valeurs de la réponse ne correspondraient pas à celles de l'énoncé.
    Je vous joins l'exercice complet ; si vous voyez des simplifications ou des améliorations, je serais content que vous me les signaliez.

    Bonne journée à vous.
    Pierre
    Fichiers attachés Fichiers attachés

  5. #5
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Plutot que d'écrire des variables globales partout (qui vous metterons dedans un jour où l'autre), faites :
    1) retourner des choses par vos fonctions
    2) dépendre vos fonctions de paramètre

    Là en l'occurence à la fin de la fonction cube vous écrivez :
    et vous n'avez pas à différencier m1 et m2, ca sera m tout simplement dans les 2 cas.

    Et réponse_cube débuterait ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    def réponse_cube(p,k,e,m):
    Avec Tkinter pas sûr que récupérer la sortie d'une fonction soit facile, mais encapsuler vos fonction dans une classe devrait vous permettre de faire très simplement cela. En plus ca permettra d'avoir des variables globales à la classe (ce qui vous assure que ça n'impactera pas ailleurs).

    Ensuite éviter la recopie de code. Dans reponse cube, pourquoi ne pas écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        if p==1:
            métaux=métaux1    
        else :
            métaux=métaux2
    Et ensuite de faire votre série de print sur la variable métaux plutot que d'avoir a dupliquer métaux1 et métaux2 alors qu'on leur applique exactement le même traitement.

  6. #6
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Je viens de voir pourquoi vous distinguez metaux1 et 2 : histoire de faire la contraction des le et de si ca démarre par une voyelle. Bon c'est bien de vouloir respecter le francais, mais c'est pas du tout la bonne maniere de faire.

    Voici un code qui regroupe un peu toute mes remarques :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    #!/usr/bin/python
    from tkinter import *
    import random
    from tkinter.messagebox import *
     
    def du(nom):
        ### On teste si la premiere lettre du nom est une voyelle
        if nom[0] in 'aeiouy' : 
            #### exemple : de l'or
            return "de l'"+nom
        else :
            #### exemple : du cuivre
            return "du "+nom
     
    def de(nom):
        if nom[0] in 'aeiouy' : 
            #### exemple : d'or
            return "d'"+nom
        else :
            #### exemple : de cuivre
            return "de "+nom
     
     
    class CubeMetallique :
    		metaux={'fer':7.9,'plomb':11.4,'cuivre':9,'zinc':7.1,'platine':21.5,'nickel':8.3,"or":19.3,"aluminium":2.7,"argent":10.5,'étain':7.3}
     
    		def __init__(self,k,e,m):
    				self.k=k
    				self.e=e
    				self.m=m
    				self.densite = self.metaux[self.m]
    				self.V=(10*self.k*self.e)**3
     
                    @classmethod
    		def create_randomly(cls):
    				k=random.choice(range(1,20)) 
    				e=random.choice(range(1,20)) 
    				m=random.choice(list(cls.metaux))
    				return cls(k,e,m)
     
    		def print_enonce_cube(self):			
    				print("Une masse cubique en",self.m,"a",self.k*self.e,"cm d’arête. On la transforme en une feuille de",self.e,"mm d’épaisseur.")
    				print("Quelle est la surface de cette feuille ?")
    				print("Quel est le poids (la masse) d'un mètre carré de cette feuille ?")
    				print(' ')   
     
    		def reponse_cube(self):
    				print("On peut considérer le cube comme un pavé droit dont l'épaisseur serait égale à la longueur de l'arête")
    				print("Donc, l’épaisseur du cube est égale à",self.k*self.e,"cm =",10*self.k*self.e,"mmm.")
    				print("L’épaisseur de la feuille est",10*self.k*self.e,"/",self.e,"=",10*self.k,"fois plus petite donc, puisque le volume est constant,")
    				print("l’aire de la feuille est",10*self.k,"fois plus grande :")
    				print(10*self.k*self.e,'x',10*self.k*self.e,"×",10*self.k,"=",1000*self.k**3*self.e**2,"mm2 =",10*self.k**3*self.e**2,"cm2 =",self.k**3*self.e**2/10,"dm2 =",self.k**3*self.e**2/1000,"m2")
    				print(' ')
    				print("La densité",du(self.m),"est égale à", self.densite,"cela signifie que ")
    				print("1 dm3 ",de(self.m),"a une masse de",self.densite,"kg ou")
    				print("1 m3 = 10**3 dm3 ",de(self.m),"a une masse de",self.densite,"x 10**3 kg =",self.densite,"t") 
    				print("La masse de",self.V/10**9,"m3 ",de(self.m),"est égale à",self.densite,"x",self.V/10**9,"t =",self.densite*self.V/10**9,"t")
    				print("La masse de 1 m2 de cette feuille est égale à :",self.densite*self.V/10**9,"t/",self.V/((10**6)*self.e),"m2 =",self.densite*self.e/1000,"t =",self.densite*self.e,"kg")   
    				print(' ')
    				print(' ')
    				print("Solution utilisant le volume et la surface")
    				print("Le volume d’un cube est c × c × c = c**3 ; il faut convertir toutes les mesures dans la même unité,")
    				print("il est plus simple de convertir",self.k*self.e,"cm en mm, donc,",self.k*self.e,"cm = 10 x",self.k*self.e,"=",10*self.k*self.e,"mm donc,")
    				print("le volume du cube est égal à",10*self.k*self.e,"x",10*self.k*self.e,"x",10*self.k*self.e,"=",self.V,"mm3 =",self.V/10**3,"cm3 =",self.V/10**6,"dm3 =",self.V/10**9,"m3")
    				print("La feuille a le même volume que le cube donc,")
    				print("S = V/e =",self.V,"/",self.e,"=",self.V/self.e,"mm2 =",self.V/(100*self.e),"cm2 =",self.V/((10**4)*self.e),"dm2 =",self.V/((10**6)*self.e),"m2")
    				print(' ')
    				print(' ')
    				print(' ')
     
     
    cube = CubeMetallique.create_randomly()
     
    fenetre = Tk()
    canvas = Canvas(fenetre, width=100, height=20, background='white')
    canvas.pack(side =TOP, padx =5, pady =5)
    bouton1 = Button(fenetre, text ='cube', command = cube.print_enonce_cube)
    bouton1.pack(side =TOP, padx =10, pady =10)
    bouton3 = Button(fenetre, text ='réponse_cube', command = cube.reponse_cube)
    bouton3.pack(side =RIGHT, padx =10, pady =10)
    fenetre.mainloop()

  7. #7
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2014
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2014
    Messages : 35
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    Certes mais à quoi bon si vous ne savez pas l'utiliser?
    Les dictionnaires sont une structure de base (et essentielle) au langage, tous les bons tutos vous en donnent le mode d'emploi dans un chapitre dédié.

    - W
    J'ai suivi votre conseil et, effectivement, j'avais la solution sous les yeux et je ne l'avais pas vue.
    Merci à vous

Discussions similaires

  1. Un fichier dictionnaire ?
    Par portu dans le forum Windows
    Réponses: 6
    Dernier message: 17/04/2007, 15h26
  2. Script assez difficile avec random
    Par LFC dans le forum Requêtes
    Réponses: 6
    Dernier message: 01/08/2003, 18h02
  3. [langage] random sur liste ou tableau
    Par martijan dans le forum Langage
    Réponses: 2
    Dernier message: 15/07/2003, 14h47
  4. [VB6] : pour faire un Randomize sous vb... merci
    Par delnic dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 22/01/2003, 15h49
  5. Random en Assembleur
    Par funx dans le forum Assembleur
    Réponses: 9
    Dernier message: 02/09/2002, 17h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo