Módulo 2 EDA¶

  • Exercício 1
In [1]:
# a)
class Fib:

    def __init__(self, n):
        self.elemento_atual, self.proximo = 0, 1
        self.n = n

    def __iter__(self):
        return self

    def __next__(self):
        if self.elemento_atual > self.n:
            return StopIteration
        vfinal = self.elemento_atual
        self.elemento_atual, self.proximo = self.proximo, self.elemento_atual + self.proximo
        return vfinal
In [3]:
# b)

class Progression:

    def __init__(self, current=0, total=10):
        self.current = current
        self.total = total

    def _advance(self):
        self.current += 1

    def __iter__(self):
        return self

    def __next__(self):
        if self.total == 0:
            raise StopIteration
        else:
            answer = self.current
            self._advance()
            self.total -= 1
        return answer


print(dir(Progression(5)))

class Arithmetric(Progression):

    def __init__(self, increment=2, current=1, total=10):
        super().__init__(current, total)
        self.increment = increment

    def _advance(self):
        self.current += self.increment


class Geometric(Progression):

    def __init__(self, base=2, current=1, total=10):
        super().__init__(current, total)
        self.base = base

    def _advance(self):
        self.current *= self.base


class Fibonacci(Progression):

    def __init__(self, start= 0, total=10):
        super().__init__(start, total)
        self.atual = 0
        self.proximo = 1

    def _advance(self):
        self.current = self.proximo
        self.atual, self.proximo = self.proximo, self.atual + self.proximo
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_advance', 'current', 'total']
  • Exercício 2
In [4]:
# a)
class Retangulo:

    def __init__(self, altura, largura):
        self.altura = altura
        self.largura = largura

    def area(self):
        return self.altura*self.largura

    def perimetro(self):
        return (2*self.largura) + (2*self.altura)
In [5]:
# b)
class Quadrado(Retangulo):

    def __init__(self, lado):
        super().__init__(lado, lado)
In [6]:
# c)
class Cubo(Quadrado):

    def __init__(self, lado):
        super().__init__(lado)

    def area_cubo(self):
        return 6 * (self.altura**2)

    def volume(self):
        return self.altura ** 3
  • Exercício 3
In [7]:
class Triangulo:

    def __init__(self, base, altura):
        self.base = base
        self.altura = altura


class Tretangulo(Triangulo):

    def __init__(self, base, altura):
        super().__init__(base, altura)

    def hipotenusa(self):
        from math import sqrt
        return sqrt(self.base**2 + self.altura**2)

    def perimetro(self):
        return self.base + self.altura + self.hipotenusa()

    def area(self):
        return (self.base*self.altura)/2


class Tequilatero(Triangulo):

    def __init__(self, lado):
        super().__init__(lado, lado)

    def perimetro(self):
        return 3*self.altura

    def mid_area(self):
        from math import sqrt
        return sqrt(self.altura**2 - (self.altura/2)**2)

    def area(self):
        return (self.altura * self.mid_area())/2
  • Exercícios extra
  • Exercício 2
In [8]:
class Clock:

    def __init__(self, horas, minutos, segundos):
        self.horas = horas
        self.minutos = minutos
        self.segundos = segundos

    def acertar_clock(self):
        # apresenta o resultado das horas com resolucao em segundos
        self.horas = int(input('Horas:'))
        self.minutos = int(input('Minutos:'))
        self.segundos = int(input('Segundos:'))
        print(str(self.horas) + ':' + str(self.minutos) + ':' + str(self.segundos))
        return (self.horas*3600) + (self.minutos*60) + self.segundos

    def increment(self):
        if self.segundos < 59:
            self.segundos += 1
        if self.segundos == 59 and self.minutos == 59:
            self.segundos = 0
            self.minutos = 0
            self.horas = 0
        if self.segundos == 59:
            self.segundos = 0
            self.minutos += 1
        print(str(self.horas) + ':' + str(self.minutos) + ':' + str(self.segundos))
        return (self.horas * 3600) + (self.minutos * 60) + self.segundos

    def hora(self):
        return self.horas
  • Exercício 3
In [9]:
class Calendar:

    def __init__(self, meses, dias):
        self.meses = meses
        self.dias = dias

    def dia_de_hoje(self):
        total_dias = 0
        for i in range(1, self.meses):
            if i == 1 or i == 3 or i == 5 or i == 7 or i == 8 or i == 10 or i == 12:
                total_dias += 31
            elif i == 2:
                total_dias += 28
            elif i == 4 or i == 6 or i == 9 or i == 11:
                total_dias += 30
        return total_dias + self.dias

    def acertar_dia(self):
        self.meses = int(input('Nº do Mês:'))
        self.dias = int(input('Dia:'))
        print(f"Hoje é dia {self.dias} do mês {self.meses}")
        return self.dia_de_hoje()

    def more_day(self):
        if self.meses == 1 or self.meses == 3 or self.meses == 5 or self.meses == 7 or self.meses == 8 or self.meses == 10:
            if self.dias < 31:
                self.dias += 1
            else:
                self.meses += 1
                self.dias = 1
        elif self.meses == 2:
            if self.dias < 28:
                self.dias += 1
            else:
                self.meses += 1
                self.dias = 1
        elif self.meses == 4 or self.meses == 6 or self.meses == 9 or self.meses == 11:
            if self.dias < 30:
                self.dias += 1
            else:
                self.meses += 1
                self.dias = 1
        elif self.meses == 12:
            if self.dias < 31:
                self.dias += 1
            else:
                self.meses = 1
                self.dias = 1
        print(f"Hoje é dia {self.dias} do mês {self.meses}")
        return self.dia_de_hoje()
  • Exercício 4
In [10]:
class CalendarClock(Calendar, Clock):

    def acert_dia_hora(self):
        self.acertar_dia()
        self.acertar_clock()

    def increment2(self):
        self.increment()
        if self.horas == 0 and self.minutos == 0 and self.minutos == 0:
            self.more_day()
        print(f'Horas: {self.horas}, Minutos: {self.minutos}, Segundos: {self.segundos}')
        print(f'Dia: {self.dias}, Mês: {self.meses}')

    def hora_e_dia(self):
        print(f'Horas: {self.horas}, Minutos: {self.minutos}, Segundos: {self.segundos}')
        print(f'Dia: {self.dias}, Mês: {self.meses}')