# ---
# jupyter:
#   jupytext:
#     text_representation:
#       extension: .py
#       format_name: light
#       format_version: '1.5'
#       jupytext_version: 1.14.4
#   kernelspec:
#     display_name: Python 3
#     language: python
#     name: python3
# ---

# # Tarea 2: Clase 3
#
# <img style="float: right; margin: 0px 0px 15px 15px;" src="https://upload.wikimedia.org/wikipedia/commons/6/62/CPT-OOP-objects_and_classes.svg" width="300px" height="300px" />
#
# Cada clase que veamos tendrá una tarea asignada, la cual contendrá problemas varios que se pueden resolver con lo visto en clase, de manera que puedas practicar lo que acabas de aprender.
#
# En esta ocasión, la tarea tendrá ejercicios relativos a la clase 3, de programación orientada a objetos.
#
# Para resolver la tarea, por favor cambiar el nombre del archivo a "Tarea2_ApellidoNombre.ipynb", sin acentos ni letras ñ (ejemplo: en mi caso, el archivo se llamaría "Tarea2_JimenezEsteban.ipynb"). Luego de haber cambiado el nombre, resolver cada uno de los puntos en los espacios provistos.
#
# Referencias:
# - https://realpython.com/python3-object-oriented-programming/
# - https://www.w3resource.com/python-exercises/class-exercises/
# - https://anandology.com/python-practice-book/object_oriented_programming.html
# ___

# ## 1. 
#
# Usando la clase `Perro()` que definimos en la clase, instanciar tres nuevos perros, cada uno con edades diferentes.
#
# Luego, fuera de la clase, escriba una función llamada `perro_mas_viejo()`, cuyos argumentos sean 3 objetos de la clase perro e imprima el nombre del perro más viejo con su edad; algo como:
#
# > El perro más viejo es `firulais`, y tiene `8` años.

class Perro():
    
    def __init__(self, nombre, edad):
        self.nombre = nombre
        self.edad = edad


# +
perro1 = Perro(nombre="Chief", edad=0.7)
perro2 = Perro(nombre="Mandarina", edad=3)
perro3 = Perro(nombre="Pascal", edad=1.2)

perro1.edad, perro2.edad, perro3.edad


# +
def perro_mas_viejo(perro1, perro2, perro3):
    viejo = max(perro1.edad, perro2.edad, perro3.edad)
    print(f"El perro más viejo tiene {viejo} años")
    return

perro_mas_viejo(perro1, perro2, perro3)

#No supe como traerme el nombre del perro más viejo.
# -

# ## 2. 
#
# Escriba una clase cuyo nombre sea `Circulo`, la cual tenga un atributo de instancia `radio`, y dos métodos para calcular el área y el perímetro del círculo.
#
# Además, instancie tres círculos con diferentes radios y calcule su área y su perímetro.

import numpy as np
class Circulo():
    
    def __init__(self, radio):
        if(radio <= 0):
            print("No se puede tener un radio de 0 o menor a 0")
            return 0
        else:
            self.radio = radio
        
    def area(self):
        return np.pi * self.radio**2
    
    def perimetro(self):
        return 2 * np.pi * self.radio


cir1 = Circulo(66)
cir2 = Circulo(12)
cir3 = Circulo(43)

cir1.area(), cir3.area(), cir2.area()

cir1.perimetro(), cir3.perimetro(), cir2.perimetro()


# ## 3.
#
# Escriba una clase cuyo nombre sea `CuentaBancaria`, y que inicialice un atributo de instancia llamado `saldo` con valor cero. Además, esta clase debe contener tres métodos:
# - método `depositar()`: el cual reciba el monto de depósito y actualice el atributo de `saldo`;
# - método `retirar()`: el cual reciba el monto a retirar, y actualice el atributo de `saldo`;
# - método `imprimir_saldo()`: el cual imprima el saldo actual de la cuenta.
#
# Instancie una cuenta bancaria, y haga varios retiros y depósitos.

class CuentaBancaria():
    
    def __init__(self, saldo = 0):
        self.saldo = saldo
    
    def depositar(self, deposito):
        self.saldo = self.saldo + deposito
        return self.saldo
    
    def retirar(self, retiro):
        if self.saldo - retiro < 0:
            print("Lo sentimos, no cuenta con saldo suficiente para retirar esa cantidad")
        else:
            self.saldo = self.saldo - retiro
            return self.saldo
    
    def imprimir_saldo(self):
        print(f"Su saldo actual es de ${self.saldo}")


C0123 = CuantaBancaria(1000)
C2523 = CuantaBancaria(5000)
C6723 = CuantaBancaria(12000)

C0123.depositar(5000), C2523.depositar(800), C6723.depositar(12000)

C0123.retirar(4000), C2523.retirar(8000), C6723.retirar(1100)

C0123.imprimir_saldo(), C2523.imprimir_saldo(), C6723.imprimir_saldo()


# ## 4.
#
# A partir de lo resuelto en el problema anterior, cree una clase llamada `CuentaSaldoMinimo` que herede de la clase `CuentaBancaria`.
#
# La clase hija `CuentaSaldoMinimo` debe requerir un parámetro adicional de *saldo mínimo*, y debe sobreescribir el método `retirar()` de la clase padre, de forma que al llamar el método `retirar()`:
# - si el saldo que resultaría después del retiro es mayor al saldo mínimo, se efectúa el retiro;
# - si el saldo que resultaría después del retiro es menor al saldo mínimo, se imprima un mensaje con la cantidad máxima que se puede retirar y no se efectúe el retiro.
#
# Instancie una cuenta bancaria con saldo mínimo, y haga varios retiros y depósitos.

class CuentaSaldoMinimo(CuentaBancaria):
    
    def __init__(self, saldo, saldo_minimo):
        super().__init__(saldo)
        self.saldo_minimo = saldo_minimo
    
    def retirar(self, retiro):
        if self.saldo - retiro >= self.saldo_minimo:
            self.saldo = self.saldo - retiro
            print("Transacción exitosa")
        else:
            retiro_max = self.saldo - self.saldo_minimo
            print(f"Lo siento mi chavo lo máximo que puedes sacar es {retiro_max}")
        return print(f"Su saldo actual es de ${self.saldo}")


C6789 = CuentaSaldoMinimo(10000, 5000)
C6789.imprimir_saldo()


C6789.retirar(6000)

C4623 = CuentaSaldoMinimo(1000, 100)
C4623.depositar(500)
C4623.imprimir_saldo()
C4623.retirar(400)

C2342 = CuentaSaldoMinimo(1000, 100)
C2342.depositar(1000)
C2342.imprimir_saldo()
C2342.retirar(2000)





# <script>
#   $(document).ready(function(){
#     $('div.prompt').hide();
#     $('div.back-to-top').hide();
#     $('nav#menubar').hide();
#     $('.breadcrumb').hide();
#     $('.hidden-print').hide();
#   });
# </script>
#
# <footer id="attribution" style="float:right; color:#808080; background:#fff;">
# Created with Jupyter by <NAME>.
# </footer>

StarcoderdataJupyterScriptsDedupFiltered