From b6aaa085c042df7a1cb08f89a825c5553f140dd1 Mon Sep 17 00:00:00 2001 From: zenite-serena Date: Wed, 27 Sep 2023 18:40:54 -0300 Subject: [PATCH] =?UTF-8?q?Exerc=C3=ADcios=20da=20semana=2008=20-=20Z?= =?UTF-8?q?=C3=AAnite=20Serena?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __init__.py | 0 assets/__init__.py | 0 exercicios/__init__.py | 0 exercicios/para-casa/Biblioteca.py | 95 ++++++++++++++++++++ exercicios/para-casa/Livro.py | 14 +++ exercicios/para-casa/__init__.py | 0 exercicios/para-casa/testBiblioteca.py | 115 +++++++++++++++++++++++++ exercicios/para-casa/testLivro.py | 14 +++ material/__init__.py | 0 9 files changed, 238 insertions(+) create mode 100644 __init__.py create mode 100644 assets/__init__.py create mode 100644 exercicios/__init__.py create mode 100644 exercicios/para-casa/Biblioteca.py create mode 100644 exercicios/para-casa/Livro.py create mode 100644 exercicios/para-casa/__init__.py create mode 100644 exercicios/para-casa/testBiblioteca.py create mode 100644 exercicios/para-casa/testLivro.py create mode 100644 material/__init__.py diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/assets/__init__.py b/assets/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/exercicios/__init__.py b/exercicios/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/exercicios/para-casa/Biblioteca.py b/exercicios/para-casa/Biblioteca.py new file mode 100644 index 0000000..1181279 --- /dev/null +++ b/exercicios/para-casa/Biblioteca.py @@ -0,0 +1,95 @@ +from Livro import Livro + +class Biblioteca : + """Classe biblioteca. + + Para instanciar a classe utilize o exemplo: + + biblioteca = Biblioteca() + """ + def __init__(self): + self.livros = [] + """Propriedade livros do tipo Lista""" + + def adicionar_livro(self, livro: Livro): + """Método adicionar_livro da classe Biblitoeca + + Recebe o parâmetro livro do tipo da classe Livro e + adiciona na propriedade livros + + Retorna exceção caso o parâmetro recebido não seja do tipo Livro + """ + if (not isinstance(livro, Livro) ): + raise TypeError(f"Esperado Livro obtido valor {livro} do tipo {type(livro)}") + self.livros.append(livro) + + def exibir_livros(self): + """Método exibir_livros da classe Biblioteca + + Exibe a lista de livros""" + + return self.livros + + def emprestar_livro(self, livro: Livro): + + """Método emprestar_livro da classe Biblioteca + + Recebe o parâmetro livro do tipo da classe Livro e + muda o valor esta_emprestado""" + + if livro in self.livros: + i = self.livros.index(livro) + self.livros[i].esta_emprestado = True + + else: + raise ValueError("Livro não encontrado na biblioteca") + + def remover_livro(self, livro: Livro): + """Método remover_livro da classe Biblioteca + + Recebe o parâmetro livro do tipo da classe Livro e + remove na propriedade livros + """ + if livro in self.livros: + i = self.livros.index(livro) + try: + if self.livros[i].esta_emprestado: + raise ValueError("Livros emprestados não podem ser removidos") + except: + pass + else: + self.livros.pop(i) + else: + raise ValueError("Livro não encontrado na biblioteca") + + def buscar_livro(self, livro: Livro): + """Método buscar_livro da classe Biblioteca + + Recebe o parâmetro livro do tipo da classe Livro e + retorna suas propriedades + (nome do livro, autor e informação se livro está disponível ou emprestado) + """ + if livro in self.livros: + i = self.livros.index(livro) + livro_buscado = self.livros[i] + infos_livro = { + "Nome do livro": livro_buscado.nome_livro, + "Nome do autor": livro_buscado.autor_livro, + "O livro está disponível?": livro_buscado.esta_emprestado + } + return infos_livro + else: + raise ValueError("Livro não encontrado na biblioteca") + + def devolver_livro(self, livro: Livro): + """Método devolver_livro da classe Biblioteca + + Recebe o parâmetro livro do tipo da classe Livro e + mudar o status do livro para não emprestado na propriedade Livros + """ + if livro in self.livros: + i = self.livros.index(livro) + self.livros[i].esta_emprestado = False + + else: + raise ValueError("Livro não encontrado na biblioteca") diff --git a/exercicios/para-casa/Livro.py b/exercicios/para-casa/Livro.py new file mode 100644 index 0000000..a10b555 --- /dev/null +++ b/exercicios/para-casa/Livro.py @@ -0,0 +1,14 @@ +class Livro: + """Classe biblioteca. + + Recebe no construtor os parametros nome e autor como o exemplo: + + livro = Livro("nome livro","autor livro") + """ + def __init__(self, nome_livro, autor_livro): + self.nome_livro = nome_livro + """propriedade nome do livro""" + self.autor_livro = autor_livro + """propriedade autor do livro""" + self.esta_emprestado = False + """propriedade esta_emprestado. Valor padrão é falso""" diff --git a/exercicios/para-casa/__init__.py b/exercicios/para-casa/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/exercicios/para-casa/testBiblioteca.py b/exercicios/para-casa/testBiblioteca.py new file mode 100644 index 0000000..799384a --- /dev/null +++ b/exercicios/para-casa/testBiblioteca.py @@ -0,0 +1,115 @@ +from unittest import TestCase +from Biblioteca import Biblioteca +from Livro import Livro + +class TestBiblioteca(TestCase): + + def setUp(self): # Esse método é chamado antes de cada um dos testes dessa classe + self.biblioteca = Biblioteca() + + def test_init_deve_passar(self): + # Arrange / Act feitos no setup() + # Assert + self.assertIsInstance(self.biblioteca.livros, list) + + def test_adicionar_livro_deve_passar(self): + # Arrange + nome_livro = "Grande Sertão: Veredas" + autor_livro = "Guimarães Rosa" + livro = Livro(nome_livro, autor_livro) + + # Act + self.biblioteca.adicionar_livro(livro) + + # Assert + self.assertEqual(1, len(self.biblioteca.livros)) + + def test_adicionar_livro_nao_deve_inserir_numero(self): + # Arrange + livro = 1984 + + # Act / Assert + with self.assertRaises(TypeError): + self.biblioteca.adicionar_livro(livro) + + def test_exibir_livro_deve_passar(self): + # Arrange + nome_livro1 = "Cem anos de solidão" + autor_livro1 = "Gabriel García Márquez" + livro1 = Livro(nome_livro1, autor_livro1) + + nome_livro2 = "A casa dos espíritos" + autor_livro2 = "Isabel Allende" + livro2 = Livro(nome_livro2, autor_livro2) + + # # Act + self.biblioteca.adicionar_livro(livro1) + self.biblioteca.adicionar_livro(livro2) + livros_exibidos = self.biblioteca.exibir_livros() + + # # Assert + retorno_esperado = [livro1, livro2] + self.assertEqual(retorno_esperado, livros_exibidos) + + def test_emprestar_livro_deve_passar(self): + + # Arrange + nome_livro = "Ficções" + autor_livro = "Jorge Luis Borges" + livro = Livro(nome_livro, autor_livro) + self.biblioteca.adicionar_livro(livro) + + # # Act + self.biblioteca.emprestar_livro(livro) + + # # Assert + self.assertTrue(self.biblioteca.livros[0].esta_emprestado) + + def test_remover_livro_deve_passar(self): + + # Arrange + nome_livro = "O paraíso são os outros" + autor_livro = "Valter Hugo Mãe" + livro = Livro(nome_livro, autor_livro) + self.biblioteca.adicionar_livro(livro) + + # Act + self.biblioteca.remover_livro(livro) + + # Assert + self.assertFalse(livro in self.biblioteca.livros) + + def test_buscar_livro_deve_passar(self): + + # Arrange + nome_livro = "Olhos d'água" + autor_livro = "Conceição Evaristo" + livro = Livro(nome_livro, autor_livro) + self.biblioteca.adicionar_livro(livro) + + # Act + self.biblioteca.buscar_livro(livro) + livro_buscado = self.biblioteca.buscar_livro(livro) + + # Assert + retorno_esperado = { + "Nome do livro": nome_livro, + "Nome do autor": autor_livro, + "O livro está disponível?": False} + + self.assertEqual(livro_buscado, retorno_esperado) + + def test_devolver_livro_deve_passar(self): + + # Arrange + nome_livro = "Torto Arado" + autor_livro = "Itamar Vieira Junior" + livro = Livro(nome_livro, autor_livro) + self.biblioteca.adicionar_livro(livro) + self.biblioteca.emprestar_livro(livro) + + # # Act + self.biblioteca.devolver_livro(livro) + + # # Assert + self.assertFalse(self.biblioteca.livros[0].esta_emprestado) diff --git a/exercicios/para-casa/testLivro.py b/exercicios/para-casa/testLivro.py new file mode 100644 index 0000000..b7d645c --- /dev/null +++ b/exercicios/para-casa/testLivro.py @@ -0,0 +1,14 @@ +from unittest import TestCase +from Livro import Livro + +class TestLivro(TestCase): + def test_init_deve_passar(self): + # Arrange + nome_livro = "A paixão segundo GH" + autor_livro = "Clarice Lispector" + # Act + livro = Livro(nome_livro, autor_livro) + # Assert + self.assertEqual(nome_livro, livro.nome_livro) + self.assertEqual(autor_livro, livro.autor_livro) + self.assertEqual(False, livro.esta_emprestado) \ No newline at end of file diff --git a/material/__init__.py b/material/__init__.py new file mode 100644 index 0000000..e69de29