# 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
# 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']
# 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)
# b)
class Quadrado(Retangulo):
def __init__(self, lado):
super().__init__(lado, lado)
# 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
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
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
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()
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}')