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 :

Vérifier une donnée dans un tuple [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de Boudha25
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Janvier 2019
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Janvier 2019
    Messages : 32
    Par défaut Vérifier une donnée dans un tuple
    Bonjour,

    J'aimerais vérifier si une donnée existe dans un tuple. Je m'explique: Je fais une recherche dans ma BD pour une suppression de donnée. Ma recherche porte sur le prenom et le nom d'une personne, évidemment il peut y avoir 2 personnes qui s'appelle pareil, j'aimerais seulement faire une vérification pour supprimer la bonne personne. Je fais une requête qui affiche L'id_membre, le prenom et le nom. Ensuite l'utilisateur doit entrer l'id_membre a supprimer. J'aimerais vérifier que l'utilisateur entre une donnée valide, que l'id_membre est présent dans le résultat de la recherche. Après la vérification, je vais faire ma requête de surpression avec le bon id_membre. Voici le bout de code que j'ai jusqu'à présent.
    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
    import datetime
     
    while True:
        results = ((47, 'jules', 'cesar', '325538421766', b'47.png', datetime.datetime(2021, 8, 3, 10, 32, 6)), (48, 'jules', 'cesar', '325538421766', b'48.png', datetime.datetime(2021, 8, 3, 13, 15, 35)))
        print(type(results))#results est un tuple creer suite a une requête de ma BD.
     
     
        id_confirm = int(input("Id_membre à supprimer:"))
     
        if id_confirm in results: # C'est ici que je bloque, je veux confirmer que l'itilisateur entre un choix valide: soit 47 ou 48 dans ce cas-ci
            prenom  =  "jules"
            nom = "cesar"
            confirm = input("Confirmer la supression de %s %s %s: Oui (O) ou Non (N):"%(id_confirm, prenom, nom)) or 'O'# O par défaut         
            if confirm == 'O' or confirm == 'o' or confirm == 'oui' or confirm == 'Oui' or confirm == 'OUI':
                #requete de suppression
                print("Membre effacer avec succès")
                break
            else:
                break
        else:
            print("Cette donnée est non valide")
            continue
    Je sais que les tuples sont immuable, est-ce que je dois absolument transformer mon tuple en liste pour faire la vérification? Merci de me répondre. Je débute en python et j'aimerais m'améliorer avec du code qui a du sens.

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Ton tuple est en fait un tuple de tuples, donc ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    >>> import datetime
    >>> r = ((47, 'jules', 'cesar', '325538421766', b'47.png', datetime.datetime(2021, 8, 3, 10, 32, 6)), (48, 'jules', 'cesar', '325538421766', b'48.png', datetime.datetime(2021, 8, 3, 13, 15, 35)))
    >>> 47 in r
    False
    >>> 47 in r[0]
    True
    >>> for i in r:
    ...     if 47 in i:
    ...             print(i)
    ... 
    (47, 'jules', 'cesar', '325538421766', b'47.png', datetime.datetime(2021, 8, 3, 10, 32, 6))

  3. #3
    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
    Qqch comme cela devrait fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    existing_ids = [result[0] for result in results]
    if id_confirm in existing_ids :

  4. #4
    Membre averti Avatar de Boudha25
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Janvier 2019
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Janvier 2019
    Messages : 32
    Par défaut
    Voici la réponse que j'ai trouvé. Il en existe surement des meilleurs. Les tuples ressemblent aux listes, mais on ne peut pas les modifier une fois qu’ils ont été créés. Donc la seule façon que j'ai trouvé est de passer par la création d'une liste. J'ai pris la 2e méthode de ce site:https://waytolearnx.com/2019/04/tran...te-python.html
    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
    import datetime
     
    while True:
        try:
            results = ((47, 'fff', 'ff', '325538421766', b'47.png', datetime.datetime(2021, 8, 3, 10, 32, 6)), (48, 'fff', 'ff', '325538421766', b'48.png', datetime.datetime(2021, 8, 3, 13, 15, 35)))
            print(type(results))#results est un tuple creer suite a une requête de ma BD.
     
     
            id_confirm = int(input("Id_membre à supprimer:"))
     
     
            #conversion du tuple results en liste.
     
            liste = [] 
                        # initialisation de liste
            for tupl in results: 
                for i in tupl: 
                    liste.append(i) 
     
            # afficher la liste
            print("liste:")
            print(liste)
            print(type(liste))
     
            if id_confirm in liste: # C'est ici que je bloque, je veux confirmer que l'itilisateur entre un choix valide: soit 47 ou 48 dans ce cas-ci
                prenom  =  "jules"
                nom = "cesar"
                confirm = input("Confirmer la supression de %s %s %s: Oui (O) ou Non (N):"%(id_confirm, prenom, nom)) or 'O'# O par défaut         
                if confirm == 'O' or confirm == 'o' or confirm == 'oui' or confirm == 'Oui' or confirm == 'OUI':
                    #requete de supression
                    print("Membre effacer avec succès")
                    break
                else:
                    break
            else:
                print("Cette donnée est non valide")
                continue
     
        except ValueError:
            print("Entrer un nombre valise SVP.")
    Merci a ceux qui ont répondu.

  5. #5
    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 Boudha25 Voir le message
    Les tuples ressemblent aux listes,
    C'est exact. ils ont d'ailleurs ma préférence quand je dois stocker divers éléments mais que je n'ai pas besoin de les modifier.

    Citation Envoyé par Boudha25 Voir le message
    mais on ne peut pas les modifier une fois qu’ils ont été créés.
    Oui et non. Un tuple est en effet invariant mais n'interdit de créer un second tuple copie du premier mais dans lequel l'élément à "supprimer" n'est pas copié. Et rien n'interdit que ce second tuple soit stocké dans la même variable que le premier
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> t=(1, 2, 3, "toto")
    >>> t=tuple(x for x in t if type(x) == int)
    >>> t
    (1, 2, 3)

    Citation Envoyé par Boudha25 Voir le message
    Donc la seule façon que j'ai trouvé est de passer par la création d'une liste. J'ai pris la 2e méthode de ce site:https://waytolearnx.com/2019/04/tran...te-python.html
    Alors là c'est un peu différent car tu transformes ton tuple 2D en liste 1D. Déjà je me demande pourquoi tu tiens absolument à modifier un tuple résultat alors que tu peux parfaitement le regénérer à partir de ta bdd une fois la suppression effectuée en bdd.
    Mais le vrai souci, c'est "que ce passerait-il si la valeur 47 (l'id à supprimer) était aussi présente dans une autre valeur (exemple ((47, "Jules", "César"), (55, "toto", 47)) ???
    Il ne te faut chercher l'id que dans le champ correspondant à l'id
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    result=((47, "Jules", "César"), (55, "toto", 47))
    id_confirm=int(input("id?"))
    print(id_confirm in (x[0] for x in result))
    Et si tu tiens absolument à modifier le résultat en cours, alors personnellement au lieu de transformer mon tuple 2D en liste 1D, je transformerais mon tuple 2D en liste de tuples result=list(result). Tu ne peux pas modifier result[i] mais tu peux le supprimer sans souci.


    Citation Envoyé par Boudha25 Voir le message
    if confirm == 'O' or confirm == 'o' or confirm == 'oui' or confirm == 'Oui' or confirm == 'OUI'
    if confirm.lower() in ("o", "oui").


    Citation Envoyé par Boudha25 Voir le message
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if confirm == 'O' or confirm == 'o' or confirm == 'oui' or confirm == 'Oui' or confirm == 'OUI':
    	...
    	...
    	break
    else:
    	break

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if confirm == 'O' or confirm == 'o' or confirm == 'oui' or confirm == 'Oui' or confirm == 'OUI':
    	...
    	...
    # if
    break
    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]

  6. #6
    Membre averti Avatar de Boudha25
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Janvier 2019
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Janvier 2019
    Messages : 32
    Par défaut Merci pour ton commentaire
    Citation Envoyé par Sve@r Voir le message
    Bonjour

    C'est exact. ils ont d'ailleurs ma préférence quand je dois stocker divers éléments mais que je n'ai pas besoin de les modifier.


    Oui et non. Un tuple est en effet invariant mais n'interdit de créer un second tuple copie du premier mais dans lequel l'élément à "supprimer" n'est pas copié. Et rien n'interdit que ce second tuple soit stocké dans la même variable que le premier
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> t=(1, 2, 3, "toto")
    >>> t=tuple(x for x in t if type(x) == int)
    >>> t
    (1, 2, 3)


    Alors là c'est un peu différent car tu transformes ton tuple 2D en liste 1D. Déjà je me demande pourquoi tu tiens absolument à modifier un tuple résultat alors que tu peux parfaitement le regénérer à partir de ta bdd une fois la suppression effectuée en bdd.
    Mais le vrai souci, c'est "que ce passerait-il si la valeur 47 (l'id à supprimer) était aussi présente dans une autre valeur (exemple ((47, "Jules", "César"), (55, "toto", 47)) ???
    Il ne te faut chercher l'id que dans le champ correspondant à l'id
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    result=((47, "Jules", "César"), (55, "toto", 47))
    id_confirm=int(input("id?"))
    print(id_confirm in (x[0] for x in result))
    Et si tu tiens absolument à modifier le résultat en cours, alors personnellement au lieu de transformer mon tuple 2D en liste 1D, je transformerais mon tuple 2D en liste de tuples result=list(result). Tu ne peux pas modifier result[i] mais tu peux le supprimer sans souci.



    if confirm.lower() in ("o", "oui").




    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if confirm == 'O' or confirm == 'o' or confirm == 'oui' or confirm == 'Oui' or confirm == 'OUI':
    	...
    	...
    # if
    break
    Merci pour ton commentaire. C'est grâce a des commentaires et des explications comme tu as fait qu'on devient tous meilleur.

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    Par défaut
    Salut,

    Citation Envoyé par Boudha25 Voir le message
    Les tuples ressemblent aux listes, mais on ne peut pas les modifier une fois qu’ils ont été créés.
    Votre code ne modifie pas le tuple de tuples, il se contente de vérifier que l'identifiant existe. Puis c'est du côté base de donnée qu'on va supprimer l'enregistrement (pas le tuple correspondant).

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

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

Discussions similaires

  1. [AJAX] Vérifier des données dans une BDD avec AJAX
    Par mwech dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 22/10/2008, 15h13
  2. [MySQL] Vérifier l'existance d'une donnée dans la base avant insertion
    Par Him dans le forum PHP & Base de données
    Réponses: 26
    Dernier message: 16/07/2006, 15h47
  3. Réponses: 2
    Dernier message: 28/10/2005, 12h52
  4. Réponses: 2
    Dernier message: 14/10/2005, 10h11
  5. Réponses: 4
    Dernier message: 11/06/2004, 16h27

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