Algorithme Python
Répondre à la discussion
Affichage des résultats 1 à 10 sur 10

Algorithme Python



  1. #1
    invite559d53a0

    Algorithme Python


    ------

    Bonjour,

    Je suis débutant autodidacte en programmation python. J'ai fait un algorithme simple pour définir une classe Personne et deux méthodes pour: entrer l'identité d'une personne à partir du clavier et ensuite pour afficher cette identité. Mon script est comme suit:

    Code:
    ligne        Instruction
    01            class Personne(object):       #définition de la classe Personne
    02                  def __init__(self, n="??",p="??"):
    03                       self.nom,self.prenom = n,p
    04                  def demande_identite(self):      #méthode pour demander l'identité
    05                       n = str(raw_input("Entrez le nom: "))
    06                       p = str(raw_input("Entrez le prénom: "))
    07                  def affiche (self):                     #méthode pour afficher l'identité
    08                       print ("Nom: " + self.nom + " " + "Prenom: " + self.prenom)
    Je souhaite améliorer mon script pour vérifier que la première lettre du nom et du prénom sont en majuscule. Je sais qu'il y a une méthode "capitalize" mais je ne vois pas comment l'intégrer dans mon programme. Pouvez-vous m'aider s'il vous plaît? D'avance je vous remercie.

    -----
    Dernière modification par Jack ; 22/03/2011 à 11h40.

  2. #2
    Dormeur74

    Re : Algorithme Python

    Essaye ceci :

    07 n=n.capitalize()
    08 p=p.capitalize()

  3. #3
    polo974

    Re : Algorithme Python

    Quand tu joins du python il est indispensable d'utiliser la balise code (le dièse en édition avancée)
    sinon l'indentation (qui fait tout en python) disparait...

    Problème d'indentation résolu
    Dernière modification par Jack ; 22/03/2011 à 11h41.
    Jusqu'ici tout va bien...

  4. #4
    invite559d53a0

    Re : Algorithme Python

    Merci Dormeur74 pour votre réponse et merci Polo974 pour le conseil. Dormeur 74 pouvez-vous me dire à quel moment interviennent les nouvelles instructions que vous m'avez données? Quand je fais l'appel dans l'interpréteur Python je n'ai aucun message d'erreur si je n'utilise pas des majuscules pour les premières lettres. Comment savoir si les nouvelles instructions font bien la vérification? Voici l'appel que j'ai tapé dans l'interpréteur:

    Code:
    >>> a = Personne("shakespeare","william")
    >>> a.demande_identite()
    Entrez le nom : shakespeare               # s minuscule
    Entrez le prénom : william                  #w minuscule
    >>> a.affiche()
    Nom: shakespeare Prénom: william     # résultat final affiché
    J'ai également créé une sous-classe "Etudiant" qui récupère les caractéristiques de la classe Personne. Cette sous classe contient une méthode pour afficher l'identité d'un étudiant et son établissement. Mon script est comme suit :

    Code:
    Ligne            Instruction
    01                class Etudiant(Personne):
    02                        def __init__(self,n,p,e) :
    03                             Personne. __init__(self,n,p)
    04                             self.etablissement = e
    05                             e = e.capitalize()
    06                        def affiche(self):
    07                             Personne.affiche(self)
    08                             print("Etablissement: {}".format(self.etablissement))
    Est-ce que l'instruction
    Code:
    e = e.capitalize()
    est juste et est-elle bien placée? Va-t-elle vérifier que la première lettre du nom de l'établissement est bien une majuscule? Merci d'avance pour vos réponses

  5. A voir en vidéo sur Futura
  6. #5
    Dormeur74

    Re : Algorithme Python

    Juste après les lignes de saisie ce qui va donner
    Code:
    05                       n = str(raw_input("Entrez le nom: "))
    06                       p = str(raw_input("Entrez le prénom: "))
    07                       n=n.capitalize()
    08                       p=p.capitalize()

  7. #6
    invite559d53a0

    Re : Algorithme Python

    oui Dormeur74, c'est exactement là que j'ai mis les nouvelles instructions... lis ce que j'ai posté avant

  8. #7
    polo974

    Re : Algorithme Python

    Citation Envoyé par selver057 Voir le message
    ...
    Code:
    Ligne            Instruction
    01                class Etudiant(Personne):
    02                        def __init__(self,n,p,e) :
    03                             Personne. __init__(self,n,p)
    04                             self.etablissement = e
    05                             e = e.capitalize()
    ...
    Est-ce que l'instruction
    e = e.capitalize()
    est juste et est-elle bien placée? Va-t-elle vérifier que la première lettre du nom de l'établissement est bien une majuscule? Merci d'avance pour vos réponses
    Ben, pas vraiment, c'est un peu tard, là où tu l'as mis...
    e est local, reçu en paramètre, tu le ranges dans self.etablissement, et seulement après tu passes e en capitalize, juste au moment où python va se dépêcher de l'oublier...

    le plus sûr est d'écrire:
    self.etablissement = e.capitalize()

    Mais est-ce vraiment à faire chez l'étudiant?
    Mieux vaudrait le faire directement dans l'établissement, dès la saisie...
    (Si tu as une classe prof, il faudrait aussi le faire dans cette classe, idem pour les agents de maintenance, etc, c'est pas bon, ça...)

    Ensuite, comme l'étudiant est attaché à un établissement, et non à un nom d'établissement, autant passer une référence à l'objet établissement (s'il existe), ainsi, en cas de mise à jour, de l'établissement, tous les étudiants qui y sont rattachés héritent de la mise à jour.

    Python est un farceur...
    quand les données sont petites, elles sont passées en tant que valeur
    mais quand ça devient gros, c'est passé par référence...
    (règle très approximative...)
    Jusqu'ici tout va bien...

  9. #8
    Dormeur74

    Re : Algorithme Python

    Je pense que la méthode title() est préférable à la méthode capitalize() pour la raison suivante : si un utilisateur entre "jean-pierre" comme prénom et "dupont-aignan" comme nom

    p.capitalize(),n.capitalize() donnera "Jean-pierre Dupont-aignan"

    alors que p.title(),n.title() donnera "Jean-Pierre Dupont-Aignan"

    Autre remarque : je crois qu"il est bon de réserver la première ligne qui suit la déclaration d'une classe par une chaîne de caractères décrivant succinctement sont contenu (__doc__).

  10. #9
    invite559d53a0

    Re : Algorithme Python

    Merci beaucoup à tous les deux pour les conseils. Si je résume, j'ai une classe Personne qui est comme suit:

    Code:
    ligne        Instruction
    01            class Personne(object):       # définition de la classe Personne
    02                  def __init__(self, n="??",p="??"):
    03                       self.nom,self.prenom = n,p
    04                  def demande_identite(self):      #méthode pour demander l'identité]
    05                       n = str(raw_input("Entrez le nom: "))
    06                       n = n.title()                 # préféré à n.capitalize()
    07                       p = str(raw_input("Entrez le prénom: "))
    08                       p = p.title()                 # préféré à p.capitalize()    
        
    09                  def affiche (self):                     # méthode pour afficher l'identité
    10                       print ("Nom: {} Prenom: {}".format(self.nom,self.prenom))
    et une sous classe Etudiant qui est comme suit :

    Code:
    Ligne            Instruction
    01                class Etudiant(Personne):    #Définition de la classe Etudiant
    02                        def __init__(self,n,p,e) :
    03                             Personne. __init__(self,n,p)
    04                             self.etablissement = e.title() # préféré à e.capitalize()
    05                        def affiche(self):
    06                             Personne.affiche(self)
    07                             print("Etablissement: {}".format(self.etablissement))
    Je suis parti sur le principe que l'étudiant est attaché à un nom d'établissement et je n'ai pas créé d'autres sous classes (prof, personnel administratif...) mais les propositions me donnent matière à réflexion.
    A présent si je veux tester ces algorithmes, est-ce que ce type d'appel est juste?

    Pour la classe Personne:
    Code:
    >>>p = Personne("shakespeare","william")
    >>>p.affiche()
    
    ou
    
    >>>p = Personne("shakespeare","william")
    >>>p.demande_identite()
    Entrez le nom: shakespeare # Nom entré à partir du clavier avec "s" minuscule
    Entrez le prénom: william # Prénom entré à partir du clavier avec "w" minuscule
    >>>p.affiche()
    Pour la classe Etudiant:
    Code:
    >>>e = Etudiant("shakespeare","william","Lycée Henri IV")
    >>>e.affiche()

  11. #10
    Dormeur74

    Re : Algorithme Python

    Tu as dû te rendre compte que ça ne marchait pas, que le nom et le prénom étaient répétés et que les premières lettres ne se mettaient pas en majuscules. Mais tu n'étais pas loin du tout.

    Comme le dit si bien Polo974, Python est un farceur, car même avec la méthode title() ce n'est pas parfait : "lycée henri IV" va donner "Lycée Henri Iv"

    Etudie les corrections et n'oublie pas de renseigner tes classes en première ligne si tu veux qu'elles entrent dans le dispositif de documentation.

    Code:
    class Personne(object):       # définition de la classe Personne
                    "classe Personne() qui fait ceci et cela"
                    def __init__(self, n="??",p="??"):
                                    self.nom,self.prenom = n.title(),p.title()
                    def demande_identite(self):      #méthode pour demander l'identité]
                                    n = str(raw_input("Entrez le nom: "))
                                    p = str(raw_input("Entrez le prénom: "))
                    def affiche (self):                     # méthode pour afficher l'identité
                                    print ("Nom: {} Prénom: {}".format(self.nom,self.prenom))
    
    class Etudiant(Personne):    #Définition de la classe Etudiant
                    "classe Etudiant() qui fait ceci et cela"
                    def __init__(self,n,p,e) :
                                    Personne. __init__(self,n,p)
                                    self.etablissement = e.title() # préféré à e.capitalize()
                    def affiche(self):
                                    print("Etablissement: {}".format(self.etablissement))
    
    p = Personne("shakespeare","william")
    p.affiche()
    
    e = Etudiant("shakespeare","william","lycée henri IV")
    e.affiche()
    
    print(p.__doc__)
    print(e.__doc__)

Discussions similaires

  1. Python
    Par invite3e3c726d dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 13/03/2009, 12h55
  2. python pyQT 3.13
    Par invite27ed3dfb dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 25/07/2008, 09h52
  3. Python et Matplotlib
    Par invite68e54eb7 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 13/12/2007, 11h41
  4. langage Python
    Par Bladejo95 dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 08/12/2006, 18h22
  5. Aide Python
    Par darkpilou1 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 23/10/2006, 13h09