import math class Circulo: def __init__ (self,x): if x
-
Upload
ramona-jacobs -
Category
Documents
-
view
31 -
download
1
description
Transcript of import math class Circulo: def __init__ (self,x): if x
Problema 1. Escribir un programa para calcular el perímetro de una circunferencia siguiendo el diálogo:
radio?__ perímetro=nº Solución 1. Con programa ad-hoc import math r=input(“radio?”) print “perímetro=”, 2*math.pi*r
Solución 2. Con clase para circunferencias import math class Circunferencia: def __init__(self,x): #metodo constructor if x<=0: exit("radio<=0") self.r=x #componente para radio def perimetro(self): return 2*math.pi*self.r #obtener valor del radio r=input(“radio?”) #crear objeto de clase Circunfrencia c=Circunferencia(r) #aplicar método para calcular perimetro print “perímetro=”,c.perimetro()
Problema 2. Calcular el área y el perímetro de un círculo Solución 1. Modificar clase Circunferencia agregando método área (los círculos, y no las circunferencias, tienen superficie) Solución 2. Usar (y escribir) nueva clase Circulo que:
extienda la clase Circunferencia con método área herede las otras componentes (datos y métodos)
#clase extendida o derivada class Circulo(Circunferencia): def area(self): return math.pi*self.r**2
#programa: area y perímetro de círculo print "Calcular área y perímetro de círculo" #crear objeto de clase Circulo #usando constructor de clase Circunferencia c=Circulo(input("radio?")) #uso de método area de clase Circulo print "área=",c.area() #uso de método heredado de clase Circunferencia print "perímetro=",c.perimetro()
Problema 3. Calcular área y perímetro de un círculo o un cuadrado circulo o cuadrado? __ radio?__ o lado?__ area=nº perimetro=nº Programa: #obtener tipo de figura r=raw_input("circulo o cuadrado?").lower() #crear objeto de clase Circulo o Clase Cuadrado if r==”circulo”: c=Circulo(input("radio?")) elif r=”cuadrado”: c=Cuadrado(input("lado?")) else: exit("debe ser circulo o cuadrado") #mostrar area y perimetro de circulo o cuadrado print "area=",c.area() print "perimetro=",c.perimetro()
import mathclass Circulo: def __init__(self,x): if x<=0: exit("radio<=0”) self.r=x def perimetro(self): return 2*math.pi*self.r def area(self): return math.pi*self.r**2
class Cuadrado: def __init__(self,x): if x<=0: exit(“lado<=0”) self.a=x def perimetro(self): return 4*self.a def area(self): return self.a**2
Nota. Constructores son similares
Solución 2. Con Herencia
import mathclass Figura: def __init__(self,x): #constructor único if x<=0: exit(“nº<=0") self.x=x #significado de x depende de figura
class Circulo(Figura): def area(self): return math.pi*self.x**2 def perimetro(self): return 2*math.pi*self.x
class Cuadrado(Figura): def area(self): return self.x**2 def perimetro(self): return 4*self.x
class Rectangulo(Figura):
def __init__(self,x,y): #constructor Figura.__init__(self,x) #ctor clase Figura self.y=y #ancho if y<=0: exit(“nº<=0")
def area(self): return self.x*self.y
def perimetro(self): return 2*(self.x+self.y)
Uso?r=Rectangulo(nº,nº)
Otras figuras?
class Triangulo(Figura):
def __init__(self,x,y,z):
if x<=0 or y<=0 or z<=0 \ #continua…
or x+y<=z or x+z<=y or y+z<=x:
exit("no forman triangulo")
self.x=x; self.y=y; self.z=z
def perimetro(self):
return self.x+self.y+self.z
def area(self):
s=(self.x+self.y+self.z)/2;
return math.sqrt(s*(s-self.x)*(s-self.y)*(s-self.z))
Uso? t=Triangulo(nº,nº,nº)
r=raw_input(“circulo,cuadrado,rectangulo o ” + \ “triangulo?").lower()if r=="circulo": f=Circulo(input("radio?"))elif r=="cuadrado": f=Cuadrado(input("lado?"))elif r=="rectangulo": f=Rectangulo(input("largo?"),\ input("ancho?"))elif r=="triangulo": f=Triangulo(input("lado1?"),\ input("lado2?"),\ input("lado3?"))else: exit("figura incorrecta")print "area=",f.area()print "perimetro=",f.perimetro()
Herencia “transitiva” (“sucesiva”)class A: def __init__(self,x): self.a=x def f(self): return self.aclass B(A): #hereda de A def __init__(self,x,y): A.__init__(self,x) self.b=y def g(self): return self.bclass C(B): #hereda de B def __init__(self,x,y,z): B.__init__(self,x,y) self.c=z def h(self): return self.cUso? >>>c=C(1,2,3)>>>c.f()+c.g()+c.h()6
A
B
C
Herencia “múltiple”class A: def __init__(self,x): self.a=x #una variable def f(self): return self.aclass B: def __init__(self,x): self.b=x #una variable def g(self): return self.bclass C(A,B): #C hereda de clases A y B def __init__(self,x,y,z): A.__init__(self,x) B.__init__(self,y) self.c=z #tres variables pq a y b se heredan def h(self): return self.cUso? >>>c=C(1,2,3)>>>c.f()+c.g()+c.h()6
A B
C