Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Atividade S08 - Carla Freitas #27

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 88 additions & 0 deletions exercicios/para-casa/Biblioteca.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
from Livro import Livro

class Biblioteca:

def __init__(self): # método construtor da classe
"""Classe Biblioteca (tem como propriedade uma lista de livros)"""

# raise NotImplementedError # levantando uma excessão para sinalizar que a classe não foi implementada

self.acervo = []
"""acervo (lista): propriedade da classe Biblioteca"""

def adicionar_livro(self, livro:Livro): # parâmetro livro do tipo classe Livro
"""Método para adiconar um livro ao acervo da Biblioteca"""

if not (isinstance(livro, Livro)):
# se a propriedade livro não for igual a classe Livro apresente mensagem de erro
raise TypeError (f"Esperado livro valor {livro} do tipo {type(livro)}")

self.acervo.append(livro)
# adicona o livro ao acervo da Biblioteca

def exibir_acervo(self, livro:Livro):
"""Método para exibir o acervo de livros da Biblioteca"""

for livro in self.acervo:
return livro
# para cada livro contido no acervo da Biblioteca: exiba os livros

def remover_livro(self, livro:Livro):
"""Método para remover um livro do acervo da Biblioteca"""

# para acessar os atributos da classe livro: livro_nomeatributo

if livro.tituloLivro in self.acervo and livro.estaEmprestado == False:
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Muito bacana que fez a verificação se o livro já está emprestado antes de alterar o status novamente

Aqui só tem uma pequena correção:
Vc está verificando se o seu parametro recebido (livro) está com o status de emprestado como falso.

é importante a gente validar com as propriedades da própria classe no caso seria:

and self.acervo[x].estaEmprestado == False:

onde x é a posição do seu livro do acervo, e para encontrar o livro correto na lista tem algumas formas, a mais comum sendo o uso da função index()

E agora a dúvida: por que funcionou dessa forma?
parabéns você acaba de conhecer mais uma mania do Python!!
quando a gente cria um objeto e atribui esse objeto a outro eles guardam a mesma referencia, então quando altera um o outro também é alterado.
para se aprofundar nesse assunto aqui um artigo Python - A diferença entre “Deep Copy e Shallow Copy”

# se o livro a ser excluído pertence ao acervo da Biblioteca e não está emprestado: remova o livro e informe ao usuário
self.acervo.remove(livro.tituloLivro)
return (f"O livro {livro.tituloLivro} foi removido com sucesso!")

elif livro.estaEmprestado == True:
# se o livro pertence ao acervo da Biblioteca e está emprestado: não remova e informe ao usuário
return (f"O livro {livro.tituloLivro} está emprestado. Portanto, não pode ser removido do acervo.")

else:
livro.tituloLivro in self.acervo and livro.tituloLivro not in self.acervo
# se o livro não pertence ao acervo da Biblioteca: informe ao usuário
return (f"O livro {livro.tituloLivro} não foi encontrado no acervo da Biblioteca.")

def pesquisar_livro(self, livro:Livro):
"""Método para pesquisar um livro no acervo da Biblioteca"""

if livro.tituloLivro in self.acervo:
# se o livro pertence ao acervo da Biblioteca: informe ao usuário os seus atributos
return (f"Livro:{livro.tituloLivro}\nAutor:{livro.autorLivro}\nAno:{livro.anoLivro}\nStatus?{livro.estaEmprestado}")

else:
livro.tituloLivro not in self.acervo
# se o livro não faz parte do acervo da Biblioteca: informe ao usuário
return ("Livro não encontrado.")

def emprestar_livro(self, livro:Livro):
"""Método para emprestar um livro do acervo da Biblioteca"""

if livro.tituloLivro in self.acervo and livro.estaEmprestado == False:
# se o livro pertence ao acervo da Biblioteca e não está emprestado: empreste o livro
return livro.estaEmprestado == True

else:
livro.tituloLivro in self.acervo and livro.estaEmprestado == True
# se o livro pertence ao acervo da Biblioteca e está emprestado: informe ao usuário
return (f"O livro {livro.tituloLivro} já se encontra emprestado.")

def devolver_livro(self, livro:Livro):
"""Método para devolver um livro emprestado ao acervo da Biblioteca"""

if livro.tituloLivro in self.acervo and livro.estaEmprestado == True:
# se o livro devolvido pertence ao acervo da Biblioteca e está emprestado: disponibilize no acervo
return livro.estaEmprestado == False

elif livro.tituloLivro in self.acervo and livro.estaEmprestado == False:
# se o livro devolvido pertence ao acervo da Biblioteca mas consta como disponível: existe um problema
return ("!Procure a gerência para verificar essa situção!")

else:
livro.tituloLivro not in self.acervo
# se o livro não pertence ao acervo da Biblioteca: informe ao usuário
return ("Livro não encontrado")

13 changes: 13 additions & 0 deletions exercicios/para-casa/Livro.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
class Livro:

def __init__(self, titulo_livro, autor_livro, ano_livro): # método construtor da classe
"""Classe Livro (tem como atributos: nome do livro, autor do livro e status do livro)"""

self.tituloLivro = titulo_livro
"""nome (str): propriedade da classe Livro"""
self.autorLivro = autor_livro
"""autor (str): propriedade da classe Livro"""
self.anoLivro = ano_livro
"""ano (str): propriedade da classe Livro"""
self.estaEmprestado = False # por padrão, quando o livro é adicionado, ele não está emprestado
"""status (bool): propriedade da classe Livro"""
Empty file.
Loading