Pular para o conteúdo principal

Exercícios da aula 07

Aula 07: Exercícios

Exercício 1

Adicione atributos tamanho e marca à classe Televisão. Crie dois objetos Televisão e atribua tamanhos e marcas diferentes. Aí imprima os atribuitos para ver a diferença.

In [1]:
class Televisão: # Definição de uma classe
    def __init__(self):  # Método especial - construtor
        self.ligada = False # atributo 
        self.canal = 2 # outro atributo
        self.marca = "Phillips"
        self.tamanho = 32
In [2]:
tv1 = Televisão()
tv2 = Televisão()
In [3]:
tv1.marca = "Sony"
tv1.tamanho = 56
In [4]:
def descrever_tv(tv):
    """
    Esta função retorna uma string que descreve as características da tv
    """
    
    return f"Televisão {tv.marca} com {tv.tamanho} polegadas"
In [6]:
print(descrever_tv(tv1))
Televisão Sony com 56 polegadas
In [7]:
print(descrever_tv(tv2))
Televisão Phillips com 32 polegadas

Exercício 2

Atualmente a classe Televisão inicializa o canal com 2. Modifique a classe de forma a receber o canal inicial em seu construtor.

In [8]:
class Televisão:
    def __init__(self, canal=2, min=2, max=13):
        self.ligada = False
        self.canal = canal
        self.cmin = min
        self.cmax = max
        
    def muda_canal_para_baixo(self):
        if self.canal -1 >= self.cmin:
            self.canal -= 1
    
    def muda_canal_para_cima(self):
        if self.canal +1 <= self.cmax:
            self.canal += 1
In [9]:
tv = Televisão(7)
tv.canal
Out[9]:
7

Exercício 3

Modifique a classe Televisão de modo que se pedirmos para mudar o canal para baixo, além do mínimo, ele vái para o máximo e vice e versa

In [18]:
class Televisão:
    def __init__(self, canal=2, min=2, max=13):
        self.ligada = False
        self.canal = canal
        self.cmin = min
        self.cmax = max
        
    def muda_canal_para_baixo(self):
        if self.canal - 1 >= self.cmin:
            self.canal -= 1
        else:
            self.canal = self.cmax
    
    def muda_canal_para_cima(self):
        if self.canal +1 <= self.cmax:
            self.canal += 1
        else:
            self.canal = self.cmin
                
In [23]:
tv = Televisão(11)
print(f"Canal: {tv.canal}")
tv.muda_canal_para_cima()
print(f"Canal: {tv.canal}")
tv.muda_canal_para_cima()
print(f"Canal: {tv.canal}")
tv.muda_canal_para_cima()
print(f"Canal: {tv.canal}")
tv.muda_canal_para_cima()
print(f"Canal: {tv.canal}")

tv.muda_canal_para_baixo()
print(f"Canal: {tv.canal}")
tv.muda_canal_para_baixo()
print(f"Canal: {tv.canal}")
tv.muda_canal_para_baixo()
print(f"Canal: {tv.canal}")
Canal: 11
Canal: 12
Canal: 13
Canal: 2
Canal: 3
Canal: 2
Canal: 13
Canal: 12

Exercício 4

Utilizando o que aprendemos com funções modifique o construtor de classe Telefisão de forma que min e max sejam parâmetros opcionais em que min vale 2 e max vale 13 caso outros valores não sejam passados

Já fiz isso nos exercícios acima!

Exercício 5

Utilizando a classe modificada no exercício anterior (4), crie duas instâncias (objetos) especificando min e max por nome.

In [24]:
tv1 = Televisão(min=2, max=69)
print(f"Min: {tv1.cmin}, Max: {tv1.cmax}")
Min: 2, Max: 69
In [25]:
tv2 = Televisão(min=14, max=50)
print(f"Min: {tv2.cmin}, Max: {tv2.cmax}")
Min: 14, Max: 50
In [ ]:
 

Exercício 6

Altere o programa de forma que a mensagem saldo insuficiente seja exibida caso haja tentativa de sacar mais dinheiro que o saldo disponível

In [29]:
class Cliente:
    def __init__(self, nome, telefone):
        self.nome = nome
        self.telefone = telefone

class Conta:
    def __init__(self, clientes, número, saldo=0):
        self.saldo = saldo
        self.clientes = clientes
        self.número = número
    def resumo(self):
        print(f"CC Número: {self.número}. Saldo: {self.saldo:10.2f}")
    def saque(self, valor):
        if self.saldo >= valor:
            self.saldo -= valor
        else:
            print(f"Conta com saldo {self.saldo:10.2f}. Insuficiente para sque de {valor:10.2f}")
    def deposito(self, valor):
        self.saldo += valor
In [37]:
joão = Cliente("João de Barros", "555-2604")
conta = Conta([joão], "01.00011", saldo=100)

conta.saque(40)
conta.resumo()
conta.saque(70)
conta.resumo()
CC Número: 01.00011. Saldo:      60.00
Conta com saldo      60.00. Insuficiente para sque de      70.00
CC Número: 01.00011. Saldo:      60.00

Exercício 7

Modifique o método resumo da class Conta para exibir o nome e o telefone de cada cliente

In [45]:
class Conta:
    def __init__(self, clientes, número, saldo=0):
        self.saldo = saldo
        self.clientes = clientes
        self.número = número
    def resumo(self):
        print(f"CC Número: {self.número}. Saldo: {self.saldo:10.2f}")
        for cliente in self.clientes:
            print(f"   Cliente: {cliente.nome}, tel. {cliente.telefone}")
    def saque(self, valor):
        if self.saldo >= valor:
            self.saldo -= valor
        else:
            print(f"Conta com saldo {self.saldo:10.2f}. Insuficiente para sque de {valor:10.2f}")
    def deposito(self, valor):
        self.saldo += valor
In [46]:
joão = Cliente("João de Barros", "555-2604")
maria = Cliente("Maria de Barros", "555-2604")

conta = Conta([joão,maria], "01.00011", saldo=100)

conta.saque(40)
conta.resumo()
conta.saque(70)
conta.resumo()
CC Número: 01.00011. Saldo:      60.00
   Cliente: João de Barros, tel. 555-2604
   Cliente: Maria de Barros, tel. 555-2604
Conta com saldo      60.00. Insuficiente para sque de      70.00
CC Número: 01.00011. Saldo:      60.00
   Cliente: João de Barros, tel. 555-2604
   Cliente: Maria de Barros, tel. 555-2604
In [ ]:
 

Exercício 8

Modofique as classes Conta e ContaEspecial para que a operação de saque retorne verdadeiro se o saque foi realizado e false caso contrário

In [48]:
class Conta:
    def __init__(self, clientes, número, saldo=0):
        self.saldo = 0
        self.clientes = clientes
        self.número = número
        self.operações = []
        self.deposito(saldo)
    def resumo(self):
        print(f"CC Número: {self.número}. Saldo: {self.saldo:10.2f}")
    def saque(self, valor):
        if self.saldo >= valor:
            self.saldo -= valor
            self.operações.append(["SAQUE", valor])
            return True
        else:
            return False
    def deposito(self, valor):
        self.saldo += valor
        self.operações.append(["DEPÓSITO", valor])
    def extrato(self):
        print(f"Extrato CC No {self.número}\n")
        for o in self.operações:
            print(f"{o[0]:10s} {o[1]:10.2f}")
        print(f"\n    Saldo: {self.saldo:10.2f}\n")

class ContaEspecial(Conta):
    def __init__(self, clientes, número, saldo=0, limite=0):
        Conta.__init__(self, clientes, número, saldo)
        self.limite = limite

    def saque(self, valor):
        if self.saldo + self.limite >= valor:
            self.saldo -= valor
            self.operações.append(["SAQUE", valor])
            return True
        else:
            return False

            
In [49]:
bozo = Cliente("Bozo Palhaço", "236-0873")
vovó = Cliente("Vovó Mafalda", "236-0873")
In [ ]:
 
In [50]:
conta1 = Conta(["bozo"], 1, 1000)
conta2 = ContaEspecial([vovó, bozo], 2, 500, 1000)
In [51]:
conta1.saque(23)
Out[51]:
True
In [52]:
conta1.saque(100000)
Out[52]:
False
In [53]:
conta2.saque(23)
Out[53]:
True
In [56]:
conta2.saque(23000)
Out[56]:
False
In [58]:
super(ContaEspecial)
Out[58]:
<super: __main__.ContaEspecial, None>

Exercício 9

Modifique a classe ContaEspecial de forma que seu extrato exiba o limite e o total disponível para saque.

In [78]:
class ContaEspecial(Conta):
    def __init__(self, clientes, número, saldo=0, limite=0):
        Conta.__init__(self, clientes, número, saldo)
        self.limite = limite

    def saque(self, valor):
        if self.saldo + self.limite >= valor:
            self.saldo -= valor
            self.operações.append(["SAQUE", valor])
            return True
        else:
            return False
    def extrato(self):
        # Vamos aproveitar O que já foi implementado
        # na classe rConta
        Conta.extrato(self)
        # Vamos colocar a informação adicional:
        print(f"Limite: {self.limite:10.2f}")
        print(f"Total disponível: {self.limite+self.saldo:10.2f}")
In [79]:
conta2 = ContaEspecial([vovó, bozo], 2, 500, 1000)
In [80]:
conta2.extrato()
Extrato CC No 2

DEPÓSITO       500.00

    Saldo:     500.00

Limite:    1000.00
Total disponível:    1500.00
In [ ]:
 

Comentários

Comments powered by Disqus