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 :

Question de logique ? ou pas [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 4
    Par défaut Question de logique ? ou pas
    hotels.csv
    Code csv : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    id,name,city,capacity,available
    134,Tourist Sunn,Anchorage,4,no
    188,Snow Palace, New Delhi,5,yes
    655,City Break,Porto Novo,3,yes

    cards.csv
    Code csv : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    number,expiration,cvc,holder
    "1234","12/26","123","JOHN SMITH"
    "5678","12/28","456","JANE SMITH"


    Bonjour
    Je rédiges un petit programme qui accède a 2 fichiers csv ci dessus. L utilisateur doit fournir la référence de son hotel(id)

    a) si l hotel est libre il peut vérifier sa carte de crédit et un recap(recu PDF sera généré)
    b)si l hotel n est pas libre un message s affichera
    c) si la carte de crédit n est pas valable un message s affichera

    J ai un rédige le code suivant et je parviens a réaliser les étapes b) et c) avec succès a chaque fois.
    Évidement étant donné qu il s agit d un programme de test si on arrive a un moment ou tous les hôtels sont occupés(available=no). On peut modifier le paramètre available dans le fichier hotels.csv a yes et continuer le test

    le problème se situe au niveau de l’étape a
    lorsque je rentre les données d un des clients(cards.csv) il s agit donc de données valides et j obtiens le message : "there is a problem with your payment"

    alors que je devrai pouvoir valider cette étape puis saisir mon nom et recevoir un reçu en PDF

    J ignore quel est le problème ? visiblement de logique(le programme n affiche aucun message d erreur)
    merci de m aider
    cordialement
    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
    import pandas as pd
    import json
     
    df = pd.read_csv("hotels.csv", dtype={"id": str})
     
    df_cards = pd.read_csv("cards.csv", dtype=str).to_dict()
     
     
    class Hotel:
        def __init__(self, hotel_id):
            self.hotel_id = hotel_id
            self.name = df.loc[df["id"] == self.hotel_id, "name"].squeeze()
     
        def book(self):
            """book a hotel  by changing its availability to no"""
            df.loc[df["id"] == self.hotel_id, "available"] = "no"
            df.to_csv("hotels.csv", index=False)
     
        def available(self):
            """check if the hotel is available"""
            availability = df.loc[df["id"] == self.hotel_id, "available"].squeeze()
            if availability == "yes":
                return True
            else:
                return False
     
     
    class ReservationTicket:
        def __init__(self, customer_name, hotel_object):
            self.customer_name = customer_name
            self.hotel = hotel_object
     
        def generate(self):
            content = f"""
             Thank you for  your reservation !
             Here are your booking data
             Name: {self.customer_name}
             Hotel name : {self.hotel.name}
             """
            return content
     
     
    class CreditCard:
        def __init__(self, number):
            self.number = number
     
        def validate(self, expiration, holder, cvc):
            card_data = {"number": self.number, "expiration": expiration,
                         "holder": holder, "cvc": cvc}
            m_data = frozenset(card_data.items())
            if m_data in df_cards:
                return True
            else:
                return False
     
     
    print(df)
    hotel_ID = input("Enter the Id of the hotel :")
    hotel = Hotel(hotel_ID)
     
    if hotel.available():
        credit_card = CreditCard(number="1234")
        if credit_card.validate(expiration="12/26", holder="JOHN SMITH", cvc="123"):
            hotel.book()
            name = input("Enter your name: ")
            reservation_ticket = ReservationTicket(customer_name=name, hotel_object=hotel)
            print(reservation_ticket.generate())
        else:
            print("there was a problem with your payment")
     
    else:
        print("Hotel is not free")
    YAR!!@b@labu21

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 838
    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 838
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Première question: trouves-tu ton code lisible ? Alors ok que tu ne saches pas poster un code c'est compréhensible mais quoi, tu n'es pas foutu d'aller voir les autres topics comment ont fait les habitués ? Sinon c'est écrit dans les règles que visiblement tu n'es pas allé lire non plus.

    Ensuite, pourquoi tu appelles les fonctions avec des valeurs figées ? Si tu as des données dans un CSV quelque part il faut t'en servir.

    Pour tes erreurs de logique, seul print() pourra t'aider. Tu affiches tes valeurs avant et après appel et tu vérifies si elles sont cohérentes.
    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]

  3. #3
    Membre actif
    Inscrit en
    Février 2007
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 41
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Bonjour

    Première question: trouves-tu ton code lisible ? Alors ok que tu ne saches pas poster un code c'est compréhensible mais quoi, tu n'es pas foutu d'aller voir les autres topics comment ont fait les habitués ? Sinon c'est écrit dans les règles que visiblement tu n'es pas allé lire non plus.

    Ensuite, pourquoi tu appelles les fonctions avec des valeurs figées ? Si tu as des données dans un CSV quelque part il faut t'en servir.

    Pour tes erreurs de logique, seul print() pourra t'aider. Tu affiches tes valeurs avant et après appel et tu vérifies si elles sont cohérentes.
    PS
    Pardon j'ai un probleme je n arrive pas a le resoudre...Une idee une suggestion....Je trouve ta reponse assez mechante...Pardon de le dire...
    Si ma publication n est pas de ton gout...Tu aurai pu ne rien dire....Ton post ne m aide en rien HELAS

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 754
    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 754
    Par défaut
    Citation Envoyé par idream Voir le message
    Pardon j'ai un probleme je n arrive pas a le resoudre...Une idee une suggestion....Je trouve ta reponse assez mechante...Pardon de le dire...
    Si ma publication n est pas de ton gout...Tu aurai pu ne rien dire....Ton post ne m aide en rien HELAS
    Une bonne partie des remarques provient sans doute du manque de balise code pour rendre code et données lisible. Un modérateur est sans doute passé par là pour éditer votre message et ajouter ces balises. D'où le message de sve@r.

    Ceci dit, vous utilisez pandas et définissez des classes. Ce ne sont pas des outils ou des constructions de débutants. Et il ne vous vient pas à l'idée d'afficher l'état des objets comparés (un simple print suffirait). Pourtant c'est un réflexe qu'on acquiert en essayant de mettre au point le code des exercices proposés dans un bon tuto lorsqu'on apprend les bases.
    Auriez vous été inspiré par une déesse comme Srinivasa Ramanujan (chatGPT fonctionne aussi)? De fait, c'est quoi votre niveau en programmation? Et comment se mettre à votre niveau pour vous expliquer quoi? Impossible de savoir ce que vous maîtrisez vraiment.

    Dans les faits, vous comparez un dictionnaire de dictionnaires avec un dictionnaire de tuples: ça ne peut pas marcher... et ce qui ne va pas, c'est du côté de la mise en forme des informations (=informatique) pour réaliser le test de validation de la carte.

    Vu votre niveau (apparent) demander de l'aide pour faire cette mise en forme n'a rien à voir avec poster du code et attendre qu'on le corrige: on est pas là pour repriser vos chaussettes trouées.

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

  5. #5
    Futur Membre du Club
    Inscrit en
    Août 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 4
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Une bonne partie des remarques provient sans doute du manque de balise code pour rendre code et données lisible. Un modérateur est sans doute passé par là pour éditer votre message et ajouter ces balises. D'où le message de sve@r.

    Ceci dit, vous utilisez pandas et définissez des classes. Ce ne sont pas des outils ou des constructions de débutants. Et il ne vous vient pas à l'idée d'afficher l'état des objets comparés (un simple print suffirait). Pourtant c'est un réflexe qu'on apprend en essayant de faire les exercices pour apprendre les bases.

    Dans les faits, vous comparez un dictionnaire de dictionnaires avec un dictionnaire de tuples: ça ne peut pas marcher... et ce qui ne va pas, c'est du côté de la mise en forme des informations pour réaliser le test de validation de la carte.

    Vu votre niveau (apparent) demander de l'aide pour faire cette mise en forme n'a rien à voir avec poster du code et attendre qu'on le corrige: on est pas là pour repriser vos chaussettes trouées.

    - W
    Merci
    je vous remercies... Et je preferes ne pas m attarder sur vos humeurs..Pardon aller deverser votre colere ailleurs... Moi j essaie de comprendre le probleme qu es ce que jai mal implementé ou loupé...Si cela vous enerve s il vous plait passez votre chemin. Je vous en pries. Je n ai pas de honte a apprendre.

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 754
    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 754
    Par défaut
    Citation Envoyé par labas21 Voir le message
    Moi j essaie de comprendre le probleme qu es ce que jai mal implementé ou loupé...Si cela vous enerve s il vous plait passez votre chemin. Je vous en pries. Je n ai pas de honte a apprendre.
    Vous postez dans un forum de discussion pas dans une hotline où on va vous livrer une correction. Je vous ai indiqué ce qu'il se passait dans votre code et pourquoi çà ne marchait pas (et où ça ne marchait pas).

    Normalement, vous devriez pouvoir en faire quelque chose ou du moins indiquer ce que vous n'avez pas compris dans ces indications.

    Maintenant, si vous attendez qu'on code une solution pour vous, vous vous êtes trompé de forum.

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

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 754
    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 754
    Par défaut
    Citation Envoyé par labas21 Voir le message
    J ignore quel est le problème ? visiblement de logique(le programme n affiche aucun message d erreur)
    Tant qu'on n'a pas vérifié qu'un code fonctionne, on ne sait pas s'il fait le boulot attendu (logique!).
    Ce qui n'est pas logique, c'est de fabriquer des "class" sans s'assurer qu'elles fonctionnent individuellement avant de les composer dans un programme qui sera confiant sur leur comportement...

    Quand ça ne marche pas, on essaie de comprendre ce qu'il s'y passe pour corriger.
    Pour ça on part du problème "la validation d'une carte bleu supposée valide ne retourne pas le résultat attendu".
    En relisant le code, on voir que c'est la condition m_data in cards (ligne 51) qui est supposée faire ce boulot.
    Ce qui doit amener à regarder à quoi ressemblent m_data et cards (avec print) pour constater qu'on a fait n'importe quoi et revoir quelques détails.

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

  8. #8
    Futur Membre du Club
    Inscrit en
    Août 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 4
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Tant qu'on n'a pas vérifié qu'un code fonctionne, on ne sait pas s'il fait le boulot attendu (logique!).
    Ce qui n'est pas logique, c'est de fabriquer des "class" sans s'assurer qu'elles fonctionnent individuellement avant de les composer dans un programme qui sera confiant sur leur comportement...

    Quand ça ne marche pas, on essaie de comprendre ce qu'il s'y passe pour corriger.
    Pour ça on part du problème "la validation d'une carte bleu supposée valide ne retourne pas le résultat attendu".
    En relisant le code, on voir que c'est la condition m_data in cards (ligne 51) qui est supposée faire ce boulot.
    Ce qui doit amener à regarder à quoi ressemblent m_data et cards (avec print) pour constater qu'on a fait n'importe quoi et revoir quelques détails.

    - W
    J ai revu la declaration des dictionnaires et la comparaison...J ai detecté l erreur et corrigé....oui merci de m avoir orienté vers la ligne de code qui faisait probleme...Difficile de savoir surtout quand aucun message d erreur n est generé

  9. #9
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 545
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 545
    Par défaut
    Il n'y a certes pas de messages d'erreurs, mais vu que le cheminement ne passe par là où tu l'avais prévu, il faut revenir à la condition qui a mené au mauvais chemin et donc comprendre pourquoi ça a pris le mauvais chemin. et on remonte jusqu'à la source du problème en regardant ce que donne les variables et voir si ça correspond à ce que l'on s'attendait à trouver et corriger le cas échéant.

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

Discussions similaires

  1. Logique ou pas logique ? Telle est la question
    Par Milo59000 dans le forum SQL
    Réponses: 4
    Dernier message: 20/06/2008, 23h03
  2. [Question Bete] f ou pas f!!!
    Par theshark85 dans le forum C
    Réponses: 17
    Dernier message: 20/05/2006, 16h02
  3. Composant, socket et question de logique
    Par Hervé Saladin dans le forum Composants VCL
    Réponses: 1
    Dernier message: 09/04/2006, 16h56
  4. Question SQL (facile) mais pas pour moi
    Par fabianrs dans le forum Langage SQL
    Réponses: 15
    Dernier message: 30/03/2006, 03h44
  5. logique ou pas? entête dans fichier .php
    Par mussara dans le forum Langage
    Réponses: 6
    Dernier message: 22/11/2005, 13h43

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