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 :

Pourquoi il n'y a qu'un seul if qui est exécuté ?


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 388
    Par défaut Pourquoi il n'y a qu'un seul if qui est exécuté ?
    Bonjour,

    Je souhaite afficher 3 messages différents d'après le if, je ne sais pas pourquoi mais il n'y a qu'un seul if qui s'exécute. Il s'agit du <<elif title2 != ''and title3 != '':>>, si je l'enlève alors ce sera le else qui s'exécutera alors que normalement j'ai des valeurs pour les autres elif.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    if (title2 != '') and (title3 == ''):
           print(title1 + "<==============>"+ title2+ "===============> PAS DISPONIBLE" )
     
    elif (title3 != '') and (title2 == ''):
           print(title1 + "<==============>PAS DISPONIBLE<===============>" + title_lang)
     
    elif title2 != ''and title3 != '':
           print(title1 + "<==============>"+ title2+ "===============>" + title_lang)
     
     else:
         print(title1 + "<==============>PAS DISPONIBLE<===============>PAS DISPONIBLE")
    Merci

  2. #2
    Membre émérite
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2013
    Messages
    485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2013
    Messages : 485
    Par défaut
    L'utilisation de if/elif est la solution en python pour remplacer l'instruction "case" qui n'existe pas dans ce langage.

    Donc, dans ton exemple, vu la cascade des if/elif tu fais, cela reviens à vouloir réaliser un seul "print" suivant l'un des 3 conditions indiqués, le dernier élément étant le cas par défaut.

    si tu veux avoir 3 messages, il te faudra réaliser 3 if/else indépendants
    Comme par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    if (title2 != '') and (title3 == ''):
         print(title1 + "<==============>"+ title2+ "===============> PAS DISPONIBLE" )
    else:
         print(title1 + "<==============>PAS DISPONIBLE<===============>PAS DISPONIBLE") 
     
    if (title3 != '') and (title2 == ''):
         print(title1 + "<==============>PAS DISPONIBLE<===============>" + title_lang)
    else:
         print(title1 + "<==============>PAS DISPONIBLE<===============>PAS DISPONIBLE") 
     
    if title2 != ''and title3 != '':
         print(title1 + "<==============>"+ title2+ "===============>" + title_lang)
    else:
         print(title1 + "<==============>PAS DISPONIBLE<===============>PAS DISPONIBLE")
    Petite remarque sur ton code: si dans 2 mois tu sais à quoi correspond title1, title2 et title3, tu es très fort. Je te conseille de nommer tes variables de façon beaucoup plus explicite, en plus cela t'évitera de devoir ajouter un roman de commentaire pour expliquer ton code.

  3. #3
    Membre très actif

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Billets dans le blog
    1
    Par défaut
    Ce serait plus simple de mieux structurer les conditions.

    Si les 2 sont là.
    Ou si un des deux est là.
    sinon aucun des deux n'est là.

    En gros ça ferait :

    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
     
    >>> def test(title2, title3) :
    ...     if title2 and title3 : # Les 2 contiennent quelquechose
    ...          print("{t2} et {t3} ne peuvent pas se voir, il va y avoir confrontation...".format(t2=title2, t3=title3))
    ...     elif title2 or title3 : # Un des 2 contient quelquechose
    ...         #print(title2 + title3)
    ...         # Ou encore :
    ...         #print(title2 if title2 else title3)
    ...         # Ou encore :
    ...         message = ("eh eh, j'ai atomisé ce noob de title3 qui se la pétait trop !", 
    ...                    "J'ai réduit à néant title2 qui n'était pas digne de figurer parmi l'élite des titles"
    ...                    )
    ...         print(message[0] if title2 else message[1])
    ...     else : # Les 2 sont vides
    ...         print("Ah ah, c'est moi title1 qui gagne les 2 autres se sont détruit mutuellement, lol !")
    ... 
    >>> test('tic', 'tac')
    tic et tac ne peuvent pas se voir, il va y avoir confrontation...
    >>> test('tic', '')
    eh eh, j'ai atomisé ce noob de title3 qui se la pétait trop!
    >>> test('', 'tac')
    J'ai réduit à néant title2 qui n'était pas digne de figurer parmi l'élite des titles
    >>> test('', '')
    Ah ah, c'est moi title1 qui gagne les 2 autres se sont détruit mutuellement, lol !

  4. #4
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    @bistouille, sauf que ligne 13 tu triches un peu avec ton if en ligne ;p

    sinon on peut aussi avoir recours à une variable qu'on utilise comme un champ de bits et un tableau :
    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
    >>> def bla(t1, t2):
    ...    var = 0  # peut prendre les valeurs binaires 00, 01, 10, ou 11 (donc 0,1,2 ou 3 en décimal)
    ...    if t1: var |= 1  # en binaire 01
    ...    if t2: var |= 2  # en binaire 10
    ...    print (['ni t1, ni t2', 'seulement t1', 'seulement t2', 't1 et t2'][var])
    >>> bla('', '')
    ni t1, ni t2
    >>> bla('', '')
    ni t1, ni t2
    >>> bla('pouet', '')
    seulement t1
    >>> bla('', 'coincoin')
    seulement t2
    >>> bla('pouet', 'coincoin')
    t1 et t2
    par ailleurs et pour répondre à la question initiale, la construction if/elif/else fonctionne très bien comme déroulé dans le code initial, si ça ne fonctionne pas c'est -apparemment- que les tests n'étaient pas bons :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    >>> def coin(t1, t2):
    ...   if not t1 and not t2:
    ...     print 'ni t1, ni t2'
    ...   elif t1 and not t2:
    ...     print 'juste t1'
    ...   elif not t1 and t2:
    ...     print 'juste t2'
    ...   else:
    ...     print 't1 et t2'
    ...
    >>> coin('','')
    ni t1, ni t2
    >>> coin('pouet','')
    juste t1

  5. #5
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 388
    Par défaut
    Merci beaucoup pour vos réponses
    Finalement, j'ai trouvé un autre moyen avec try, je l'ai utilisé 2 fois pour 2 clés et un seul message à la fin

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 84
    Dernier message: 05/02/2010, 10h01
  2. verfier q'un seul bouton radio est selectionné
    Par marry dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 28/04/2009, 11h11
  3. Réponses: 19
    Dernier message: 25/05/2007, 17h15
  4. [VBA]Modifier un fichier xls qui est en lecture seule
    Par niavlys77 dans le forum VBA Access
    Réponses: 2
    Dernier message: 18/04/2007, 19h45
  5. fonction qui s'exécute qu'une seule fois sous Firefox
    Par la.sophe dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 01/03/2006, 10h02

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