Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 23/03/2019, à 12:29

piter42

"RESOLU" résultat script pas tout conforme

bonjour voila ce que j ai comme résultat apres mon script,

un rectangle de 15 sur 30
a une surface de <bound method Rectangle.surface of <__main__.Rectangle object at 0x7f7b588d4e80>> et un perimetre de <bound method Rectangle.perimetre of <__main__.Rectangle object at 0x7f7b588d4e80>>
un carre de 12 sur 12
a une surface de <bound method Rectangle.surface of <__main__.Carre object at 0x7f7b588d4ef0>> et un perimetre de <bound method Rectangle.perimetre of <__main__.Carre object at 0x7f7b588d4ef0>>

script:

#!/usr/bin/env python3.6
# -*- coding = utf-8 -*-


class Rectangle(object):
    "classe Rectangle"
    def __init__(self, longueur= 0, largeur = 0 ):
        self.L  =   longueur
        self.l  =  largeur
        self.nom  =  "rectangle"
        
    def perimetre(self):
        return "({0:d} + {1:d} * 2 = {2:d})".format(self.l,  self.L,  (self.l + self.l*2))
        
    def surface(self):
        return "{0:d}*{1:d} = {2:d}".format(self.L * self.l,  self.L * self.l)
        
    def mesures(self):
        print(f"un {self.nom} de {self.L} sur {self.l}")
        print(f"a une surface de {self.surface} et un perimetre de {self.perimetre}")
        
class Carre(Rectangle):
    "classe Carre"
    def __init__(self,cote):
        Rectangle.__init__(self, cote, cote)
        self.nom =  "carre"

if __name__ == "__main__":
    r1 =  Rectangle(15,30)
    r1.mesures()
    c1 =  Carre(12)
    c1.mesures()
    

j avait écrit les méthodes perimetre et surface (avec des f-string mais j ai tout remplacé par des . format pensant que cela venait de là mais apparemment non

merci pour vos réponses

Dernière modification par piter42 (Le 25/03/2019, à 18:40)

Hors ligne

#2 Le 23/03/2019, à 12:56

kholo

Re : "RESOLU" résultat script pas tout conforme

salut Pit,
bon tu bosses sur l'héritage... cool

voyons ton problème
python est orienté objet... donc tu peux lui demander de d'envoyer les coordonnées d'un objet
... et c'est ce qu'il a fait  !
donc si tu veux avoir la résolution de la fonction... self.surface()

pour les fstrings, j'ai laissé tombé... tant qu'à avoir une string autant jouer avec :

    def mesures(self):
        print(self.L)
        print("un " + self.nom  + " de " + str(self.L) + " sur " + str(self.l))

wink

PS ya d'autres erreurs dans ton code roll

class Rectangle(object):
    "classe Rectangle"
    def __init__(self, longueur=0, largeur=0):
        self.L  =  longueur
        self.l  =  largeur
        self.nom  =  "rectangle"
        
    def perimetre(self):
        return (self.l + self.l) * 2
        
    def surface(self):
        return self.L * self.l

    def mesures(self):
        print("un " + self.nom  + " de " + str(self.L) + " sur " + str(self.l))
        print("a une surface de "  + str(self.surface()) + " et un perimetre de " + str(self.perimetre()))
        
class Carre(Rectangle):
    "classe Carre"
    def __init__(self,cote):
        Rectangle.__init__(self, cote, cote)
        self.nom =  "carre"

if __name__ == "__main__":
    r1 = Rectangle(15,30)
    r1.mesures()
    c1 = Carre(12)
    c1.mesures()

et avec les docstrings c'est encore plusss mieux !

#!/usr/bin/env python3
# -*- coding: UTF8 -*-
"""
création d'objets rectangles et carrés
calcul et affichage du perimetre et de la surface
"""

class Rectangle(object):
    "classe Rectangle"
    def __init__(self, longueur=0, largeur=0):
        "initialise la classe"
        self.L  =  longueur
        self.l  =  largeur
        self.nom  =  "rectangle"
        
    def perimetre(self):
        "renvoie le périmètre du Rectangle"
        return (self.l + self.l) * 2
        
    def surface(self):
        "renvoie la surface du Rectangle"
        return self.L * self.l

    def mesures(self):
        "affiche les information de périmetre et de surface du Rectangle"
        print("un " + self.nom  + " de " + str(self.L) + " sur " + str(self.l))
        print("a une surface de "  + str(self.surface()) + " et un perimetre de " + str(self.perimetre()))
        
class Carre(Rectangle):
    "classe Carre"
    def __init__(self,cote):
        "initialise la classe"
        Rectangle.__init__(self, cote, cote)
        self.nom =  "carre"

if __name__ == "__main__":
    r1 = Rectangle(15,30)
    r1.mesures()
    c1 = Carre(12)
    c1.mesures()

Dernière modification par kholo (Le 23/03/2019, à 13:10)

Hors ligne

#3 Le 23/03/2019, à 13:13

pingouinux

Re : "RESOLU" résultat script pas tout conforme

Bonjour piter42,
Tu as en effet des erreurs sur 3 lignes.

Ligne n°13

        return "(({0:d} + {1:d}) * 2 = {2:d})".format(self.l,  self.L,  (self.L + self.l)*2)

Ligne n°16

        return "{0:d}*{1:d} = {2:d}".format(self.L , self.l,  self.L * self.l)

Ligne n°20

        print(f"a une surface de {self.surface()} et un perimetre de {self.perimetre()}")

Édité : Ajout de parenthèses dans le format de la ligne 13

Dernière modification par pingouinux (Le 23/03/2019, à 13:24)

Hors ligne

#4 Le 23/03/2019, à 13:15

kholo

Re : "RESOLU" résultat script pas tout conforme

... et pour aller un peu plus loin :
tu modifies

    def mesures(self):
        "affiche les information de périmetre et de surface du Rectangle"
        retour = ""
        retour += "un " + self.nom  + " de " + str(self.L) + " sur " + str(self.l)
        retour += " a une surface de "  + str(self.surface()) + " et un perimetre de " + str(self.perimetre())
        return retour

et ton if main :

if __name__ == "__main__":
    r1 = Rectangle(15,30)
    print(r1.mesures())
    
    c1 = Carre(12)
    print(c1.mesures())

... encore que mesure() n'ai rien à faire dans ta class... mais ça c'est un point de vue !

Dernière modification par kholo (Le 23/03/2019, à 13:17)

Hors ligne

#5 Le 24/03/2019, à 10:18

piter42

Re : "RESOLU" résultat script pas tout conforme

bonjour à tout les 2 et merci pour vos réponses,j ai modifie mon script en piochant dans vos conseil et le voilà :

#!/usr/bin/env python3.6
# -*- coding = utf-8 -*-


class Rectangle(object):
    "classe Rectangle"
    def __init__(self, longueur= 0, largeur = 0 ):
        "initialise la classe"
        self.L  =   longueur
        self.l  =  largeur
        self.nom  =  "rectangle"
        
    def perimetre(self):
        "renvoi le périmetre du rectangle"
        return (self.l + self.L)*2
        
    def surface(self):
        "renvoi la surface du rectangle"
        return self.L * self.l
        
    def mesures(self):
        "affiche les informations de perimetre et surface du rectangle"
        print(f"un {self.nom} de {self.L} sur {self.l} a une surface de {self.surface()} et un perimetre de {self.perimetre()}") 
         
class Carre(Rectangle):
    "classe Carre"
    def __init__(self,cote):
        "initialise la classe"
        Rectangle.__init__(self, cote, cote)
        self.nom =  "carre"

if __name__ == "__main__":
    r1 =  Rectangle(15,30)
    r1.mesures()
    c1 =  Carre(12)

Dernière modification par piter42 (Le 24/03/2019, à 10:27)

Hors ligne

#6 Le 24/03/2019, à 13:49

kholo

Re : "RESOLU" résultat script pas tout conforme

salut,
pour les arguments :

def __init__(self, longueur=0, largeur=0):

est plus pythonique :
pour faire simple, pas d'espace autour du =

comme tu es sur l'héritage, super est à apprendre...
je sais l'utiliser mais pas encore assez pour l'expliquer.
la classe carré donnerait (sauf erreur):

class Carre(Rectangle):
    "classe Carre"
    def __init__(self,cote):
        "initialise la classe"
        # Rectangle.__init__(self, cote, cote)
        super().__init__(cote, cote)
        self.nom =  "carre"

Hors ligne