does not return the str correctly in python

0

I have 2 classes one inherits from it to calculate the perimeter and surface of a figure, the problem is that the function of the special str method does not return all the methods correctly

class Figura(object):
 def __init__(self,nombre):  
    self.nombre = nombre


class Cuadrado(Figura):
 def __init__(self,nombre,lado):
    if (nombre == 'Cuadrado'):
        if isinstance(lado, int):
            Figura.__init__(self, lado)
            self.lado=lado
            self.perimetro=0
            self.superficie=0

        else:
            raise TypeError("El valor del atributo lado debe ser numerico") 

    else:

        raise TypeError("El valor del atributo nombre debe ser cuadrado")  


def calcularPerimetro(self,lado):
    perimetro = 4 * lado
    if perimetro > 15:
        print("El valor del perimetro es mayor a 15")

    elif perimetro < 15:
        print("El valor del perimetro es menor que 15")

    return perimetro

def calcularSuperficie(self,lado):
    superficie = lado * lado
    if superficie % 2==0:
        print("El valor de la superficie es par")
    else:
        print("El valor de la superficie es impar")
    return superficie
#Aqui es el fallo que me surge
def __str__(self):
    cadena = "Un cuadrado de lado " + str(self.lado) + " tiene un perimetro " + str(self.perimetro) + " y una superficie de " + str(self.perimetro)
    return cadena 

This is the main

from EjercicioExamenFigura import *


nombre=input("Que nombre tiene tu figura")
lado=int(input("Cuanto mide el lado  de tu figura"))

cuadrado1=Cuadrado(nombre,lado)
print(cuadrado1.calcularPerimetro(lado))
print(cuadrado1.calcularSuperficie(lado))
print(cuadrado1)

Print this to me

Que nombre tiene tu figura Cuadrado
Cuanto mide el lado  de tu figura 4
El valor del perimetro es mayor a 15
16
El valor de la superficie es par
16
Un cuadrado de lado 4 tiene un perimetro 0 y una superficie de 0
  

A square on side 4 has a perimeter of 0 and a surface of 0

    
asked by Rebc3sp 04.06.2018 в 21:09
source

2 answers

0

The str method must be inside the Square class. Here is the solution in Python 3:

class Figura(object):
    def __init__(self,nombre):  
        self.nombre = nombre

class Cuadrado(Figura):
    def __init__(self,nombre,lado):
        if (nombre == 'Cuadrado'):
            if isinstance(lado, int):
                Figura.__init__(self, lado)
                self.lado=lado
                self.perimetro=0
                self.superficie=0
            else:
                raise TypeError("El valor del atributo lado debe ser numerico") 
        else:
            raise TypeError("El valor del atributo nombre debe ser 'Cuadrado' con C mayúscula") 

    def __str__(self):
        cadena = "Un cuadrado de lado {} tiene un perimetro {} y una superficie de {}".format(self.lado, self.perimetro, self.lado*self.lado)
        return cadena  

def calcularPerimetro(self,lado):
    self.perimetro = 4 * lado
    if self.perimetro > 15:
        print("El valor del perimetro es mayor a 15")
    elif self.perimetro < 15:
        print("El valor del perimetro es menor que 15")
    return self.perimetro

def calcularSuperficie(self,lado):
    superficie = lado * lado
    if superficie % 2==0:
        print("El valor de la superficie es par")
    else:
        print("El valor de la superficie es impar")
    return superficie

nombre=input("¿Qué nombre tiene tu figura?\n")
lado=int(input("¿Cuánto mide el lado  de tu figura?\n"))

cuadrado1=Cuadrado(nombre,lado)
print(calcularPerimetro(cuadrado1,lado))
print(calcularSuperficie(cuadrado1, lado))
print(cuadrado1)

Note: I worked on everything in one file, so it's up to you to work on it in modules like you did before. I recommend that you work with .format () for data output, it is much more comfortable. And I really do not understand the restriction of the figure's name.

    
answered by 05.06.2018 в 04:30
-1

Notice that it seems to me that you are not assigned value to the variables that you want to show, you show self.perimeter and in processes you refer only to the perimeter variable, for example. Greetings and I hope you get the answer.

    
answered by 04.06.2018 в 21:18