#1 Le 23/03/2019, à 11: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, à 17:40)
Hors ligne
#2 Le 23/03/2019, à 11:56
- kholo
Re : "RESOLU" résultat script pas tout conforme
salut Pit,
bon tu bosses sur l'héritage...
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))
PS ya d'autres erreurs dans ton code
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, à 12:10)
Hors ligne
#3 Le 23/03/2019, à 12: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, à 12:24)
Hors ligne
#4 Le 23/03/2019, à 12: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, à 12:17)
Hors ligne
#5 Le 24/03/2019, à 09: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, à 09:27)
Hors ligne
#6 Le 24/03/2019, à 12: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