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 :

problème avec condition " if " et "liste" pour programme


Sujet :

Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2011
    Messages : 5
    Par défaut problème avec condition " if " et "liste" pour programme
    bonjour à tous (et à toutes !!)
    étant une quiche en programmation (en l'occurrence au language python) je m'en retourne vers vous pour une ou deux questions.
    Voici mon problème, je dois réaliser un programme sur la nomenclature en chimie, ce programme d'après mon prof qui en a réalisé un, n'est pas bien compliqué (35 lignes).
    Le programme devrait ressembler à ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    si debut_molecule = 'H'
    nom = 'acide'
    si fin_molecule = 'Cl'
    nom = nom + 'chloridrique'
    si fin_molecule = 'OH'
    nom = 'hydroxide de'
    si debut_molecule = 'Mg'
    nom = nom + 'magnesium'
    si fin_molecule = 'O'
    nom = 'oxyde de'
    si debut_molecule = 'Fe'
    nom = nom + 'fer'
    (etc..)
    mon problème est le suivant: comment "ordonner" au programme qu'il reconnaisse "si début_molécule" et "si fin_molécule" ?? je pensais à qqchose du genre==> vecteur[0] = "S ; sulfure"
    vecteur[0] = [["S"] ["sulfure"]]
    vecteur [0][0] vecteur[0][1]
    j'ai donc du mal à implanter ça dans l'algo, est ce que je vais devoir ça pour chaque anion et cation??
    Mon prof m'a dit de faire 2 listes via excel avec les cations et anion ( http://jeanlouisfritsch.free.fr/docume [...] iste_ions.pdf ) et d'enregistrer en ".csv" sauf que je ne comprends pas trop l'utilité de faire ces 2 listes ..

    Voila, j'espère que qqn aura un peu de temps pour me répondre,
    Merci d'avance.

  2. #2
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Par défaut
    Les dictionnaires sont vos amis:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    debut = {" H": "Acide", "OH": "hydroxide de"}
    fin ={"CI": "Choridrique", "MG": "magnesium"}
    print(debut[" H"]+" " +fin["CI"])
    Acide Choridrique
    Petite remarque 1: j'ai des parenthèses pour le print car, je suis en python 3.2.
    Petite remarque 2: votre lien n'est pas cliquable.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2011
    Messages : 5
    Par défaut
    Citation Envoyé par Bayard Voir le message
    Les dictionnaires sont vos amis:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    debut = {" H": "Acide", "OH": "hydroxide de"}
    fin ={"CI": "Choridrique", "MG": "magnesium"}
    print(debut[" H"]+" " +fin["CI"])
    Acide Choridrique
    Petite remarque 1: j'ai des parenthèses pour le print car, je suis en python 3.2.
    Petite remarque 2: votre lien n'est pas cliquable.
    Bonsoir,
    tout d'abord merci de votre réponse.
    Quand vous parlez de dico, se sont les tutos ??
    Concernant mon lien, j'ai en fait crée 2 listes (une cation, l'autre anion) qui ressemble à ça,
    OH Hydroxide
    F Fluorure
    Cl Chlorure
    Br Bromure
    I Iodure
    O Oxyde
    S Sulfure
    NO3 Nitrate
    SO4 Sulfate
    CO3 Carbonate
    HCO3 Hydrogénocarbonate
    PO4 Phosphate
    CH3COO Acétate
    le tout en .csv cependant je ne vois pas l'intérêt, car je devrai je pense tout mettre manuellement dans l'algo ??
    Concernant ma partie sur les vecteurs, elle n'est pas bonne ??

    encore merci pour votre réponse, cela me donne un bon aperçu.Je pense pour l'instant être dans le bon .

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    Dans un premier temps, laisse tomber les dénominations "acide ..." qui vont te compliquer la vie, car l'ordre d'interprétation est inversé et les termes sont différents. Contente-toi de "Chlorure d'hydrogène" pour HCl plutôt que "Acide chloridrique"; c'est juste de toute façon.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2011
    Messages : 5
    Par défaut
    Citation Envoyé par dividee Voir le message
    Dans un premier temps, laisse tomber les dénominations "acide ..." qui vont te compliquer la vie, car l'ordre d'interprétation est inversé et les termes sont différents. Contente-toi de "Chlorure d'hydrogène" pour HCl plutôt que "Acide chloridrique"; c'est juste de toute façon.
    oui c'est ce que je fais, de toute façon il n'y aura que de la nomenclature "simple".
    Par contre je ne vois pas l'intérêt de faire 2 listes (anion-cation) , car j'encode tout "manuellement" dans l'algo ??
    ps:merci pour votre réponse

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    Je ne sais pas ce qui tu entends par "manuellement", mais l'idée c'est de faire un algo qui utilise ces listes.

    En python tu as les méthodes startswith et endswith pour tester si une chaîne débute ou se termine par une autre chaîne.

    Enregistrer les noms des ions dans un dictionnaire est valable, mais n'apporte pas grand chose car il faudra de toute façon itérer sur les valeurs; autant utiliser une liste de couples:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    cations = [("H","d'hydrogène"), ("Na","de sodium")]
    anions = [("Cl","chlorure"), ("Br","bromure")]
     
    molecule = "NaCl"  # test
     
    for anion, debut in anions:
        if molecule.endswith(anion):
            break
     
    # debut == "chlorure"
     
    ...
    Les listes anions et cations peuvent être reconstruites à partir du fichier CSV, au besoin...

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2011
    Messages : 5
    Par défaut
    Citation Envoyé par dividee Voir le message
    Je ne sais pas ce qui tu entends par "manuellement", mais l'idée c'est de faire un algo qui utilise ces listes.

    En python tu as les méthodes startswith et endswith pour tester si une chaîne débute ou se termine par une autre chaîne.

    Enregistrer les noms des ions dans un dictionnaire est valable, mais n'apporte pas grand chose car il faudra de toute façon itérer sur les valeurs; autant utiliser une liste de couples:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    cations = [("H","d'hydrogène"), ("Na","de sodium")]
    anions = [("Cl","chlorure"), ("Br","bromure")]
     
    molecule = "NaCl"  # test
     
    for anion, debut in anions:
        if molecule.endswith(anion):
            break
     
    # debut == "chlorure"
     
    ...
    Les listes anions et cations peuvent être reconstruites à partir du fichier CSV, au besoin...

    Merci pour ta réponse,
    Le but est en faite d'entrer la formule d'une molécule : exemple: HCl pour que le programme analyse, le début et la fin de cette formule , comme bayard montrait:
    debut = {" H": "Acide", "OH": "hydroxide de"}
    fin ={"CI": "Choridrique", "MG": "magnesium"}
    print(debut[" H"]+" " +fin["CI"])
    Acide Choridrique

    je ne comprends pas trop le principe de tester la boucle (désole mes connaissances sont limitées).
    Ne voyant pas trop comment faire pour insérer mes 2 listes, je vais donc devoir ajouter toutes les fonctions "manuellement" du genre==> début = {"h": "acide"} et ce pareil pour oh-hydroxide , o-oxyde,....

  8. #8
    Membre expérimenté Avatar de honosstoa
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 194
    Par défaut
    bonsoir
    je suis un débutant et je me pose une question :pourquoi ne pas utiliser un fichier texte?
    bon voila ce que je propose:
    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
     
    open('atome','w').write("début, OH ,hydroxide,début, Cl ,chlorure,\
    fin, Zn , de Zinc,fin, Mg , de magnésium,fin, H , d'hydrogène,fin, O , d'oxygène ,fin, S , de soufre,,,,")
    #fait pour au maximum 2 membres et attention aux espace
    def un(event=None):
        nom1,nom2='',''
        a=str(e1.get())
        b=-3
        c=open('atome','r').read().split(",")
        while b<( len(c)/2 )+10:
            b=b+3
            try:
                a.index(c[b+1])
                if c[b]=='début':
                    nom1=c[b+2]
                if c[b]=='fin':
                    nom2=c[b+2]
     
            except:
                None
     
        l1.configure(text=nom1+nom2)
     
    #############################################################""""
    from Tkinter import *
    f1=Tk()
    e1=Entry(f1,bg='white')
    e1.grid(row=0,column=1)
    Label(text="""entrez le nom abregé de l'atome(ex ' H Cl ' atention aux espaces et aux majuscules)""").grid(row=0,column=0)
    Label(text="""voila ce que ça donne==>""").grid(row=1,column=1)
    l1=Label(f1,text='')
    l1.grid(row=1,column=2)
    b1=Button(f1,bg='white',text='éssayer',command=un)
    b1.grid(row=2,column=1)
    b1=Button(f1,bg='red',text='quitter',command=f1.destroy)
    b1.grid(row=10,column=0,sticky=E)
    ( euh... c'était bien ça le problème in?)

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2011
    Messages : 5
    Par défaut
    Citation Envoyé par honosstoa Voir le message
    bonsoir
    je suis un débutant et je me pose une question :pourquoi ne pas utiliser un fichier texte?
    bon voila ce que je propose:
    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
     
    open('atome','w').write("début, OH ,hydroxide,début, Cl ,chlorure,\
    fin, Zn , de Zinc,fin, Mg , de magnésium,fin, H , d'hydrogène,fin, O , d'oxygène ,fin, S , de soufre,,,,")
    #fait pour au maximum 2 membres et attention aux espace
    def un(event=None):
        nom1,nom2='',''
        a=str(e1.get())
        b=-3
        c=open('atome','r').read().split(",")
        while b<( len(c)/2 )+10:
            b=b+3
            try:
                a.index(c[b+1])
                if c[b]=='début':
                    nom1=c[b+2]
                if c[b]=='fin':
                    nom2=c[b+2]
     
            except:
                None
     
        l1.configure(text=nom1+nom2)
     
    #############################################################""""
    from Tkinter import *
    f1=Tk()
    e1=Entry(f1,bg='white')
    e1.grid(row=0,column=1)
    Label(text="""entrez le nom abregé de l'atome(ex ' H Cl ' atention aux espaces et aux majuscules)""").grid(row=0,column=0)
    Label(text="""voila ce que ça donne==>""").grid(row=1,column=1)
    l1=Label(f1,text='')
    l1.grid(row=1,column=2)
    b1=Button(f1,bg='white',text='éssayer',command=un)
    b1.grid(row=2,column=1)
    b1=Button(f1,bg='red',text='quitter',command=f1.destroy)
    b1.grid(row=10,column=0,sticky=E)
    ( euh... c'était bien ça le problème in?)
    Bonjour,
    Tout d'abord merci pour cette idée !!
    Cependant notre cours est un cours basique ou les plus simples fonctions ont été vues , du style if, else,float ainsi que les bases du genre: vecteur,chaine,..
    Nous n'avons pas vu les fichiers texte donc je vais avoir du mal à justifier ça !! Ma question est de savoir l'utilité de faire 2fichiers (l'un anion l'autre cation) et surtout comment faire pour l'intégrer dans le code (oui oui je ne suis pas doué !!).
    Je suis donc parti dans cette optique :

    debut = {" H": "Acide", "OH": "hydroxide de"}
    fin ={"CI": "Choridrique", "MG": "magnesium"}
    print(debut[" H"]+" " +fin["CI"])
    Acide Choridrique

  10. #10
    Membre expérimenté Avatar de honosstoa
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 194
    Par défaut
    bonsoir
    bon alors je ne comprend pas trop ton probleme d'anion et de cation.
    Pour m'aider est ce que tu pourrais me dire: j'entre ça et je veux que sa m'affiche tel ou tel résultat . Sa m'aiderai beaucoup.
    bon en attendant voila le programme simplifié:
    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
     
    #bon voila la simplification  :
    sauvegarde=['fin','H',''' d'hydrogène ''','début','Cl','chlorure ','fin','S',' de souffre','début','OH','hydroxyde','','','',]
    nom1,nom2='',''#je fais les variables pour éviter les bug si une des 3 if est faux
    abreg = raw_input('''entrez la formule abrègée attention aux majuscules et aux espaces\n et à la virgule obligatoire par exemple entrez'H,Cl'ou 'H,' sans guillemets\
    \net appuyez sur entrée: ''')
    abreg=abreg.split(',')#transforme la chaine abreg en liste 
    b=-3    #le compteur
    while b<len(sauvegarde)/3+2:
        b=b+3   #plus 3 car un élement chimique contient 3 infos dans la liste
        if abreg [0]==sauvegarde[b+1] or abreg[1]==sauvegarde[b+1]:
            if sauvegarde[b]=='début':
                nom1=str(sauvegarde[b+2])
            if sauvegarde[b]=='fin':
                nom2=str(sauvegarde[b+2])
    print 'voici ce que ça donne '+nom1+nom2
    j'utilise le format liste et le format chaine de caractère parce que j'aime bien ces 2 formats mais tu peux surement utilisé ton format dictionnaire si tu le souhaite (moi je sais pas l'utilisé) .

  11. #11
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    reçu par MP:
    Citation Envoyé par hypnotief
    Bonjour,
    J'ai essayé votre code mais une fois que je rentre le nom ex: NaCl rien ne se passe.
    Dois je faire une manip en plus ?
    Bien à vous, bonne soirée.
    Mon code n'était pas complet; c'était un début pour te montrer comment faire.
    Voici une version plus complète:
    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
    cations = [("H","d'hydrogène"), ("Na","de sodium")]
    anions = [("Cl","chlorure"), ("Br","bromure")]
     
    def nom(molecule):
        for anion, debut in anions:
            if molecule.endswith(anion):
                break
        else:
            debut = '???'
        for cation, fin in cations:
            if molecule.startswith(cation):
                break
        else:
            fin = 'de ???'
        return ' '.join((debut, fin))
     
    # quelques tests:    
    print 'HCl =', nom('HCl')
    print 'NaCl =', nom('NaCl')
    print 'HBr =', nom('HBr')
    print 'NaBr =', nom('NaBr')
    print 'NaOH =', nom('NaOH')
    J'espère que tu verras comment adapter ce code à tes besoins; il ne reste plus qu'à compléter les listes d'anions et de cations et d'écrire une gestion des entrées/sorties.

    PS: A l'avenir, évite ce genre de question en MP, s'il te plait. Tu peux t'adresser à moi dans la discussion, je te répondrais tout autant.

Discussions similaires

  1. [AC-2007] problème avec condition If et And
    Par Rémi GAUDINAT dans le forum VBA Access
    Réponses: 3
    Dernier message: 21/06/2010, 19h05
  2. Problème avec condition IF
    Par bambino13 dans le forum ASP
    Réponses: 7
    Dernier message: 04/05/2009, 23h50
  3. Parcourir ligne - Problème avec conditions
    Par JP1983 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 17/02/2008, 22h29
  4. [MySQL] Problème avec condition if + is_int
    Par JackBeauregard dans le forum PHP & Base de données
    Réponses: 17
    Dernier message: 25/08/2006, 14h12
  5. Réponses: 6
    Dernier message: 15/06/2006, 15h15

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