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 sur comparaison de String


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2017
    Messages : 5
    Par défaut Problème sur comparaison de String
    Bonjour tout le monde, alors voila j ai un soucis sur une boucle for avec comparaison de variable string,
    je fais une comparaison "==" sur deux élément de 2 liste différentes, ci dessous le code
    je m'excuse d'avance si je ne fais pas les choses correctement , c'est la premiere fois que je poste
    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
     
    for i in range(len(List_Excel)) :
                    print(len(List_Excel))
     
                    label_ddt =  return_tag_split(List_Excel[i][0],1,".") 
     
                    #pour chaque moteur enregistre
                    for d in range(len(self.list_DDT)):
                        #si moteur == meme nom moteur de la liste
                        if str((self.list_DDT[d].return_name())) == str(label_ddt) : 
                            print()
                            print("v3 meme ddt")
                            print(self.list_DDT[d].name)
                            print(type(self.list_DDT[d].name))
                            print("***********")
                            print(label_ddt)
                            print("***************************")
                            #ddt.tri_fault_v3(ligne1D)
     
     
                        else:
                            print("new ddt v3")
                            print(self.list_DDT[d].name)
                            print(type(self.list_DDT[d].name))
                            print("-------")
                            print(label_ddt)
                            print("--------------------")
                            Ddt=DDT(label_ddt,label_ddt)
                            #Ddt.tri_fault_v3(ligne1D)
                            self.list_DDT.append(Ddt)
    et voila ce qu'il ressort dans la console:
    '__main__' chargé
    'runpy' chargé
    new ddt v3
    A_EQP_1
    <class 'str'>
    -------
    A_EQP_1
    --------------------
    591
    new ddt v3
    A_EQP_1
    <class 'str'>
    -------
    A_EQP_1
    --------------------

    on voit bien que les 2 string sont égaux mais ne passe pas dans la condition "==".

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 603
    Par défaut
    Bonjour.

    Es-tu sûr que les deux chaînes sont identiques ?

    Pas de surprise du genre "toto" et " toto" ?

    Mets des double quotes autour de tes str dans tes print, juste pour voir.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2017
    Messages : 5
    Par défaut
    Citation Envoyé par Arioch Voir le message
    Bonjour.

    Es-tu sûr que les deux chaînes sont identiques ?

    Pas de surprise du genre "toto" et " toto" ?

    Mets des double quotes autour de tes str dans tes print, juste pour voir.
    merci pour cette réponse aussi rapide .C'etait bien un espace qui m'empechait de passer la condition.

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 830
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par emeric163 Voir le message
    on voit bien que les 2 string sont égaux mais ne passe pas dans la condition "==".
    On voit bien on voit bien... ce qu'on voit surtout c'est que tu affiches self.list_DDT[d].name mais que tu testes self.list_DDT[d].return_name(). Or la base d'une vérification c'est d'afficher ce qu'on teste avec exactitude.
    Pour faire suite à la remarque d'Arioch, je te conseillerais l'instruction print("[%s]" % label_ddt, type(label_ddt)) suivie de print("[%s]" % self.list_DDT[d].return_name(), type(self.list_DDT[d].return_name())). Et si, comme je le pense, ce sont déjà des strings, alors pas besoin de str() lors du test.
    Et si self.list_DDT[d].name est équivalent à self.list_DDT[d].return_name() alors pas besoin de passer par return_name() (on n'utilise pas une fonction alors qu'on a déjà la valeur dans une variable).

    Ensuite, question algo, boucle sur liste 1 et pour chaque élément boucle sur liste 2 donc algo en O(n²) ce qu'on nomme "l'algo brute force" ou encore plus simplement "l'algo con". En utilisant des listes triées, tu peux faire un appareillage (on lit alternativement la première ou la seconde selon qui est plus petit que qui) ce qui ramène l'algo en O(n). Et en utilisant intelligemment les ensembles tu peux leur associer des opérateurs de différence ou d'intersection ce qui supprime carrément les boucles.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2017
    Messages : 5
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Bonjour

    On voit bien on voit bien... ce qu'on voit surtout c'est que tu affiches self.list_DDT[d].name mais que tu testes self.list_DDT[d].return_name(). Or la base d'une vérification c'est d'afficher ce qu'on teste avec exactitude.
    Pour faire suite à la remarque d'Arioch, je te conseillerais l'instruction print("[%s]" % label_ddt, type(label_ddt)) suivie de print("[%s]" % self.list_DDT[d].return_name(), type(self.list_DDT[d].return_name())). Et si, comme je le pense, ce sont déjà des strings, alors pas besoin de str() lors du test.
    Et si self.list_DDT[d].name est équivalent à self.list_DDT[d].return_name() alors pas besoin de passer par return_name() (on n'utilise pas une fonction alors qu'on a déjà la valeur dans une variable).

    Ensuite, question algo, boucle sur liste 1 et pour chaque élément boucle sur liste 2 donc algo en O(n²) ce qu'on nomme "l'algo brute force" ou encore plus simplement "l'algo con". En utilisant des listes triées, tu peux faire un appareillage (on lit alternativement la première ou la seconde selon qui est plus petit que qui) ce qui ramène l'algo en O(n). Et en utilisant intelligemment les ensembles tu peux leur associer des opérateurs de différence ou d'intersection ce qui supprime carrément les boucles.
    merci pour ta réponse , je n'ai pas l'habitude d'utiliser les [%s] dans les print mais je devrai en prendre l'habitude et ca m'a été très utile pour voir d'où venait le problème , encore merci a toi

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 830
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par emeric163 Voir le message
    merci pour ta réponse , je n'ai pas l'habitude d'utiliser les [%s] dans les print mais je devrai en prendre l'habitude et ca m'a été très utile pour voir d'où venait le problème , encore merci a toi
    Tu as aussi print("[{0}]".format(label_ddt), type(label_ddt)) ou encore print("[{0}] {1}".format(label_ddt, type(label_ddt)))...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Membre actif
    Homme Profil pro
    Animateur Numérique
    Inscrit en
    Février 2013
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Animateur Numérique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Février 2013
    Messages : 143
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Tu as aussi print("[{0}]".format(label_ddt), type(label_ddt)) ou encore print("[{0}] {1}".format(label_ddt, type(label_ddt)))...
    Ahah tu ne veux vraiment pas utiliser les f-Strings même en exemple..

  8. #8
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 830
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Diablo76 Voir le message
    Ahah tu ne veux vraiment pas utiliser les f-Strings même en exemple..
    Tu me connais trop bien
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. problème sur tableau de string
    Par boboss123 dans le forum C
    Réponses: 7
    Dernier message: 13/02/2012, 11h41
  2. Problème sur comparaison nombre
    Par benoitL39 dans le forum ASP
    Réponses: 4
    Dernier message: 03/04/2009, 07h56
  3. problème sur comparaison de caractère
    Par temoanatini dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/02/2008, 19h18
  4. [XSLT]Problème sur une comparaison if avec des strings
    Par LoDev dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 18/01/2008, 09h27
  5. Problème sur comparaison de date
    Par Nixar dans le forum Langage SQL
    Réponses: 4
    Dernier message: 07/12/2007, 09h19

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