From 53692a7a685a0adc02a0729878884fa34a63367c Mon Sep 17 00:00:00 2001 From: Adao Oliveira Date: Tue, 26 May 2020 14:28:16 -0300 Subject: [PATCH 01/14] Criada a classe Pessoa. --- exercicios/__init__.py | 0 exercicios/contagem_caracteres_dict.py | 23 ++++++++++++++++ exercicios/contagem_caracteres_lista.py | 35 +++++++++++++++++++++++++ oo/__init__.py | 0 oo/pessoa.py | 2 ++ teste.py | 1 + 6 files changed, 61 insertions(+) create mode 100644 exercicios/__init__.py create mode 100644 exercicios/contagem_caracteres_dict.py create mode 100644 exercicios/contagem_caracteres_lista.py create mode 100644 oo/__init__.py create mode 100644 oo/pessoa.py create mode 100644 teste.py diff --git a/exercicios/__init__.py b/exercicios/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/exercicios/contagem_caracteres_dict.py b/exercicios/contagem_caracteres_dict.py new file mode 100644 index 000000000..f068cd5da --- /dev/null +++ b/exercicios/contagem_caracteres_dict.py @@ -0,0 +1,23 @@ +def contar_caracteres(s): + """Funcao que conta os caracteres de uma string. + + Ex: + + >>> contar_caracteres('adao') + {'a': 2, 'd': 1, 'o': 1} + >>> contar_caracteres('banana') + {'a': 3, 'b': 1, 'n': 2} + + :param s: string a ser contada + """ + resultado = {} + for caracter in s: + resultado[caracter] = resultado.get(caracter, 0) + 1 + + return resultado + + +if __name__ == '__main__': + print(contar_caracteres('adao')) + print() + print(contar_caracteres('banana')) \ No newline at end of file diff --git a/exercicios/contagem_caracteres_lista.py b/exercicios/contagem_caracteres_lista.py new file mode 100644 index 000000000..8733b3fde --- /dev/null +++ b/exercicios/contagem_caracteres_lista.py @@ -0,0 +1,35 @@ +def contar_caracteres(s): + """Funcao que conta os caracteres de uma string. + + Ex: + + >>> contar_caracteres('adao') + a: 2 + d: 1 + o: 1 + >>> contar_caracteres('banana') + a: 3 + b: 1 + n: 2 + + :param s: string a ser contada + """ + caracteres_ordenados = sorted(s) + + caracter_anterior = caracteres_ordenados[0] + contagem = 1 + + for caracter in caracteres_ordenados[1:]: + if caracter == caracter_anterior: + contagem += 1 + else: + print(f"{caracter_anterior}: {contagem}") + caracter_anterior = caracter + contagem = 1 + print(f"{caracter_anterior}: {contagem}") + + +if __name__ == '__main__': + contar_caracteres('adao') + print() + contar_caracteres('banana') \ No newline at end of file diff --git a/oo/__init__.py b/oo/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/oo/pessoa.py b/oo/pessoa.py new file mode 100644 index 000000000..e1da50e22 --- /dev/null +++ b/oo/pessoa.py @@ -0,0 +1,2 @@ +class Pessoa: + pass \ No newline at end of file diff --git a/teste.py b/teste.py new file mode 100644 index 000000000..8dd175890 --- /dev/null +++ b/teste.py @@ -0,0 +1 @@ +from tkinter import * \ No newline at end of file From bdb5e5a32a4f76bca0a7f67cfe55c848c72ee26f Mon Sep 17 00:00:00 2001 From: Adao Oliveira Date: Tue, 26 May 2020 15:43:12 -0300 Subject: [PATCH 02/14] =?UTF-8?q?Criado=20o=20m=C3=A9todo=20'cumprimentar'?= =?UTF-8?q?=20da=20classe=20Pessoa?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oo/pessoa.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/oo/pessoa.py b/oo/pessoa.py index e1da50e22..d9307eb20 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -1,2 +1,10 @@ class Pessoa: - pass \ No newline at end of file + def cumprimentar(self): + return f'Ola {id(self)}' + + +if __name__ == '__main__': + p = Pessoa() + print(Pessoa.cumprimentar(p)) + print(p.cumprimentar()) + print(id(p)) \ No newline at end of file From 2e32fb9f563831e477b4c24b1461f76d18a59d5f Mon Sep 17 00:00:00 2001 From: Adao Oliveira Date: Tue, 26 May 2020 16:15:18 -0300 Subject: [PATCH 03/14] =?UTF-8?q?Criados=20os=20atributos=20de=20inst?= =?UTF-8?q?=C3=A2ncia=20'nome'=20e=20'idade'=20Criado=20o=20m=C3=A9todo=20?= =?UTF-8?q?=5F=5Frepr=5F=5F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oo/pessoa.py | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/oo/pessoa.py b/oo/pessoa.py index d9307eb20..6eeeee06b 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -1,10 +1,21 @@ class Pessoa: + def __init__(self, nome=None, idade=41): + self.nome = nome + self.idade = idade + def cumprimentar(self): - return f'Ola {id(self)}' + return f"Ola {id(self)}" + + def __repr__(self): + return f"{self.nome} tem {self.idade} anos" if __name__ == '__main__': - p = Pessoa() - print(Pessoa.cumprimentar(p)) - print(p.cumprimentar()) - print(id(p)) \ No newline at end of file + p1 = Pessoa('Xico') + p2 = Pessoa('Arthur', 7) + print(Pessoa.cumprimentar(p1)) + print(p1.cumprimentar()) + print(id(p1)) + + print(p1) + print(p2) From d0da0d35fc991ca760a0af94fe7fec24a85895de Mon Sep 17 00:00:00 2001 From: Adao Oliveira Date: Tue, 26 May 2020 16:42:15 -0300 Subject: [PATCH 04/14] =?UTF-8?q?Criado=20atributo=20de=20inst=C3=A2ncia?= =?UTF-8?q?=20complexo=20'filhos'=20Modificado=20o=20m=C3=A9todo=20=5F=5Fr?= =?UTF-8?q?epr=5F=5F=20para=20exibir=20os=20filhos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oo/pessoa.py | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/oo/pessoa.py b/oo/pessoa.py index 6eeeee06b..ccf5acf4e 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -1,21 +1,31 @@ class Pessoa: - def __init__(self, nome=None, idade=41): + def __init__(self, *filhos, nome=None, idade=41): self.nome = nome self.idade = idade + self.filhos = list(filhos) def cumprimentar(self): return f"Ola {id(self)}" def __repr__(self): - return f"{self.nome} tem {self.idade} anos" + txtSaida = f"Meu nome é {self.nome} e tenho {self.idade} anos" + + if self.filhos: + txtSaida = txtSaida + f"\nTenho {len(self.filhos)} filhos:" + for filho in self.filhos: + txtSaida = txtSaida + f"\n==> {filho}" + + return txtSaida + + if __name__ == '__main__': - p1 = Pessoa('Xico') - p2 = Pessoa('Arthur', 7) - print(Pessoa.cumprimentar(p1)) - print(p1.cumprimentar()) - print(id(p1)) - - print(p1) - print(p2) + filhos = [('Arthur', 7), ('Alice', 0)] + + pai = Pessoa(nome='Adao Oliveira', idade=41) + + for filho in filhos: + pai.filhos.append(Pessoa(nome=filho[0], idade=filho[1])) + + print(pai) From eb6c34b72918cb5d4cbdb095b9b023ba65310b14 Mon Sep 17 00:00:00 2001 From: Adao Oliveira Date: Tue, 26 May 2020 17:08:13 -0300 Subject: [PATCH 05/14] =?UTF-8?q?Testando=20a=20cria=C3=A7=C3=A3o=20de=20a?= =?UTF-8?q?tributos=20de=20inst=C3=A2ncia,=20e=20impress=C3=A3o=20dos=20at?= =?UTF-8?q?ributos=20atrav=C3=A9s=20do=20m=C3=A9todo=20=5F=5Fdict=5F=5F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 +++- oo/pessoa.py | 16 +++++++++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 6220a9500..f8d1096d0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +.gitignore + # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] @@ -6,6 +8,7 @@ __pycache__/ *.so # Distribution / packaging +venv/ .Python env/ bin/ @@ -52,4 +55,3 @@ coverage.xml # Sphinx documentation docs/_build/ - diff --git a/oo/pessoa.py b/oo/pessoa.py index ccf5acf4e..ca4d0148c 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -1,5 +1,5 @@ class Pessoa: - def __init__(self, *filhos, nome=None, idade=41): + def __init__(self, *filhos, nome=None, idade=0): self.nome = nome self.idade = idade self.filhos = list(filhos) @@ -18,8 +18,6 @@ def __repr__(self): return txtSaida - - if __name__ == '__main__': filhos = [('Arthur', 7), ('Alice', 0)] @@ -29,3 +27,15 @@ def __repr__(self): pai.filhos.append(Pessoa(nome=filho[0], idade=filho[1])) print(pai) + + # O atributo __dict__ lista todos os atributos de instancia de um objeto. + + # Imprimindo o objeto ANTES da criacao de um atributo de instancia + print(pai.__dict__) + + # Criando um atributo booleano 'casado' no objeto 'pai' + # (esse atributo nao existe em outros objetos da classe Pessoa + pai.casado = True + + # Imprimindo novamente os atributos de instancia + print(pai.__dict__) From 7ad5f3369279bc05be26d422bb4dda5ee13dba5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ad=C3=A3o=20Oliveira?= <38791458+adjoli@users.noreply.github.com> Date: Tue, 26 May 2020 17:20:20 -0300 Subject: [PATCH 06/14] Delete .gitignore --- .gitignore | 57 ------------------------------------------------------ 1 file changed, 57 deletions(-) delete mode 100644 .gitignore diff --git a/.gitignore b/.gitignore deleted file mode 100644 index f8d1096d0..000000000 --- a/.gitignore +++ /dev/null @@ -1,57 +0,0 @@ -.gitignore - -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] - -# C extensions -*.so - -# Distribution / packaging -venv/ -.Python -env/ -bin/ -build/ -develop-eggs/ -dist/ -eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -*.egg-info/ -.installed.cfg -*.egg - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.coverage -.cache -nosetests.xml -coverage.xml - -# Translations -*.mo - -# Mr Developer -.mr.developer.cfg -.project -.pydevproject -.idea - -# Rope -.ropeproject - -# Django stuff: -*.log -*.pot - -# Sphinx documentation -docs/_build/ From 1d0a152a7c4a99375591421fff0ad28c231d14ab Mon Sep 17 00:00:00 2001 From: Adao Oliveira Date: Tue, 26 May 2020 17:44:48 -0300 Subject: [PATCH 07/14] Criacao do atributo de classe 'temDeficiencia' e testes com o referido atributo --- oo/pessoa.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/oo/pessoa.py b/oo/pessoa.py index ca4d0148c..51b2744d3 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -1,4 +1,8 @@ class Pessoa: + """Implementação de uma classe que modela uma pessoa""" + + temDeficiencia = False # atributo de classe + def __init__(self, *filhos, nome=None, idade=0): self.nome = nome self.idade = idade @@ -22,6 +26,7 @@ def __repr__(self): filhos = [('Arthur', 7), ('Alice', 0)] pai = Pessoa(nome='Adao Oliveira', idade=41) + mae = Pessoa(nome='Poliana Carlos', idade=39) for filho in filhos: pai.filhos.append(Pessoa(nome=filho[0], idade=filho[1])) @@ -39,3 +44,15 @@ def __repr__(self): # Imprimindo novamente os atributos de instancia print(pai.__dict__) + + mae.filhos = pai.filhos.copy() + mae.temDeficiencia = True + print(mae) + + print(pai.__dict__) + print(mae.__dict__) + + print(pai.temDeficiencia) + print(mae.temDeficiencia) + + From 3c97f4b0f3d3d1a3e6d6c1462a2d98531ab8274d Mon Sep 17 00:00:00 2001 From: Adao Oliveira Date: Tue, 26 May 2020 17:50:17 -0300 Subject: [PATCH 08/14] Criacao do atributo de classe 'temDeficiencia' e testes com o referido atributo --- oo/pessoa.py | 1 + 1 file changed, 1 insertion(+) diff --git a/oo/pessoa.py b/oo/pessoa.py index 51b2744d3..367236e15 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -52,6 +52,7 @@ def __repr__(self): print(pai.__dict__) print(mae.__dict__) + # teste print(pai.temDeficiencia) print(mae.temDeficiencia) From 86b0885cebae72730c0ce0f171fd8bfb7a6746fa Mon Sep 17 00:00:00 2001 From: Adao Oliveira Date: Wed, 27 May 2020 10:52:49 -0300 Subject: [PATCH 09/14] =?UTF-8?q?Implementa=C3=A7=C3=A3o=20das=20classes?= =?UTF-8?q?=20Motor,=20Direcao=20e=20Carro.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oo/carro.py | 163 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 163 insertions(+) create mode 100644 oo/carro.py diff --git a/oo/carro.py b/oo/carro.py new file mode 100644 index 000000000..817fe036a --- /dev/null +++ b/oo/carro.py @@ -0,0 +1,163 @@ +""" +Voce deve criar uma classe carro que vai possuir dois +atributos compostos por outras duas classes: + 1) Motor + 2) Direção + +O Motor terá a responsabilidade de controlar a velocidade. +Ele oferece os seguintes atributos: + * Atributo de dado velocidade + * Método acelerar, aumenta a velocidade de uma unidade + * Método frear, decrementa a velocidade de duas unidades + +A Direção terá a responsabilidade de controlar a direção. Ela oferece +os seguintes atributos: + * Valores possíveis: Norte / Sul / Leste / Oeste + * Método girar à direita + * Método girar à esquerda + + N + O L + S + + Exemplo: + >>> # Testando Motor + >>> motor = Motor() + >>> motor.velocidade + 0 + >>> motor.acelerar() + >>> motor.velocidade + 1 + >>> motor.acelerar() + >>> motor.velocidade + 2 + >>> motor.acelerar() + >>> motor.velocidade + 3 + >>> motor.frear() + >>> motor.velocidade + 1 + >>> motor.frear() + >>> motor.velocidade + 0 + >>> # Testando Direção + >>> direcao = Direcao() + >>> direcao.valor + 'Norte' + >>> direcao.girar_a_direita() + >>> direcao.valor + 'Leste' + >>> direcao.girar_a_direita() + >>> direcao.valor + 'Sul' + >>> direcao.girar_a_direita() + >>> direcao.valor + 'Oeste' + >>> direcao.girar_a_direita() + >>> direcao.valor + 'Norte' + >>> direcao.girar_a_esquerda() + >>> direcao.valor + 'Oeste' + >>> direcao.girar_a_esquerda() + >>> direcao.valor + 'Sul' + >>> direcao.girar_a_esquerda() + >>> direcao.valor + 'Leste' + >>> direcao.girar_a_esquerda() + >>> direcao.valor + 'Norte' + >>> # Testando Carro + >>> carro = Carro(motor, direcao) + >>> carro.calcular_velocidade() + 0 + >>> carro.acelerar() + >>> carro.calcular_velocidade() + 1 + >>> carro.acelerar() + >>> carro.calcular_velocidade() + 2 + >>> carro.frear() + >>> carro.calcular_velocidade() + 0 + >>> carro.calcular_direcao() + 'Norte' + >>> carro.girar_a_direita() + >>> carro.calcular_direcao() + 'Leste' + >>> carro.girar_a_esquerda() + >>> carro.calcular_direcao() + 'Norte' + >>> carro.girar_a_esquerda() + >>> carro.calcular_direcao() + 'Oeste' +""" + + +# ------------------------------------------------------------------ +class Motor: + def __init__(self): + self.velocidade = 0 + + @property + def velocidade(self): + return self._velocidade + + @velocidade.setter + def velocidade(self, vel): + self._velocidade = 0 if vel < 0 else vel + + def acelerar(self): + self.velocidade += 1 + + def frear(self): + self.velocidade -= 2 + + +# ------------------------------------------------------------------ +class Direcao: + _valores = ('Norte', 'Leste', 'Sul', 'Oeste') + + def __init__(self): + self._cursor = 0 + + @property + def valor(self): + return self._valores[self._cursor] + + def girar_a_direita(self): + self._cursor += 1 + if self._cursor == len(self._valores): + self._cursor = 0 + + def girar_a_esquerda(self): + self._cursor -= 1 + if self._cursor < 0: + self._cursor = len(self._valores)-1 + + +# ------------------------------------------------------------------ + +class Carro: + def __init__(self, motor, direcao): + self._motor = motor + self._direcao = direcao + + def calcular_velocidade(self): + return self._motor.velocidade + + def acelerar(self): + self._motor.acelerar() + + def frear(self): + self._motor.frear() + + def calcular_direcao(self): + return self._direcao.valor + + def girar_a_direita(self): + self._direcao.girar_a_direita() + + def girar_a_esquerda(self): + self._direcao.girar_a_esquerda() From d542741a274cd7949427a2d53a5ab7e2d173316f Mon Sep 17 00:00:00 2001 From: Adao Oliveira Date: Wed, 27 May 2020 14:02:15 -0300 Subject: [PATCH 10/14] =?UTF-8?q?Implementa=C3=A7=C3=A3o=20das=20classes?= =?UTF-8?q?=20Motor,=20Direcao=20e=20Carro.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oo/carro.py | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/oo/carro.py b/oo/carro.py index 817fe036a..6733e30b5 100644 --- a/oo/carro.py +++ b/oo/carro.py @@ -106,7 +106,8 @@ def velocidade(self): @velocidade.setter def velocidade(self, vel): - self._velocidade = 0 if vel < 0 else vel + # Se velocidade for negativa, velocidade recebe 0 + self._velocidade = max(0, vel) def acelerar(self): self.velocidade += 1 @@ -127,14 +128,10 @@ def valor(self): return self._valores[self._cursor] def girar_a_direita(self): - self._cursor += 1 - if self._cursor == len(self._valores): - self._cursor = 0 + self._cursor = (self._cursor + 1) % len(self._valores) def girar_a_esquerda(self): - self._cursor -= 1 - if self._cursor < 0: - self._cursor = len(self._valores)-1 + self._cursor = (self._cursor - 1) % len(self._valores) # ------------------------------------------------------------------ From 7155aa7d01344fc4245f40a6b9d5585f9fbb99bb Mon Sep 17 00:00:00 2001 From: Adao Oliveira Date: Wed, 27 May 2020 14:11:32 -0300 Subject: [PATCH 11/14] Classe Direcao - Melhoria no calculo dos limites superior e inferior nos metodos 'girar_a_direita' e 'girar_a_esquerda'; Classe Motor = Substituicao do 'if' por 'max' no teste de velocidade negativa --- oo/carro.py | 1 + 1 file changed, 1 insertion(+) diff --git a/oo/carro.py b/oo/carro.py index 6733e30b5..d2259645e 100644 --- a/oo/carro.py +++ b/oo/carro.py @@ -137,6 +137,7 @@ def girar_a_esquerda(self): # ------------------------------------------------------------------ class Carro: + """Implementacao da classe Carro, e suas classe agregadas Motor e Direcao""" def __init__(self, motor, direcao): self._motor = motor self._direcao = direcao From dc83669a8464110c8d90706b796770fd27c6c23f Mon Sep 17 00:00:00 2001 From: Adao Oliveira Date: Wed, 27 May 2020 17:20:46 -0300 Subject: [PATCH 12/14] =?UTF-8?q?Cria=C3=A7=C3=A3o=20dos=20testes=20das=20?= =?UTF-8?q?classes=20Carro,=20Motor=20e=20Direcao=20usando=20unittest?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fase.py | 6 ++-- oo/pessoa.py | 8 +++++- oo/test_carro.py | 12 ++++++++ oo/test_direcao.py | 28 +++++++++++++++++++ oo/test_motor.py | 17 +++++++++++ testes/{atores_testes.py => test_atores.py} | 0 testes/{fase_testes.py => test_fase.py} | 0 testes/{integracao.py => test_integracao.py} | 0 ...placa_grafica.py => test_placa_grafica.py} | 0 9 files changed, 67 insertions(+), 4 deletions(-) create mode 100644 oo/test_carro.py create mode 100644 oo/test_direcao.py create mode 100644 oo/test_motor.py rename testes/{atores_testes.py => test_atores.py} (100%) rename testes/{fase_testes.py => test_fase.py} (100%) rename testes/{integracao.py => test_integracao.py} (100%) rename testes/{testes_placa_grafica.py => test_placa_grafica.py} (100%) diff --git a/fase.py b/fase.py index 3385175c6..1c8fd161f 100644 --- a/fase.py +++ b/fase.py @@ -43,7 +43,7 @@ def adicionar_obstaculo(self, *obstaculos): :param obstaculos: """ - pass + self._obstaculos.extend(obstaculos) def adicionar_porco(self, *porcos): """ @@ -51,7 +51,7 @@ def adicionar_porco(self, *porcos): :param porcos: """ - pass + self._porcos.extend(porcos) def adicionar_passaro(self, *passaros): """ @@ -59,7 +59,7 @@ def adicionar_passaro(self, *passaros): :param passaros: """ - pass + self._passaros.extend(passaros) def status(self): """ diff --git a/oo/pessoa.py b/oo/pessoa.py index 367236e15..6487e2e37 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -1,3 +1,5 @@ +# -*- coding: utf-8 -*- + class Pessoa: """Implementação de uma classe que modela uma pessoa""" @@ -22,10 +24,14 @@ def __repr__(self): return txtSaida +class Homem(Pessoa): + pass + + if __name__ == '__main__': filhos = [('Arthur', 7), ('Alice', 0)] - pai = Pessoa(nome='Adao Oliveira', idade=41) + pai = Homem(nome='Adao Oliveira', idade=41) mae = Pessoa(nome='Poliana Carlos', idade=39) for filho in filhos: diff --git a/oo/test_carro.py b/oo/test_carro.py new file mode 100644 index 000000000..0900663b1 --- /dev/null +++ b/oo/test_carro.py @@ -0,0 +1,12 @@ +from unittest import TestCase +from carro import Motor + +class CarroTestCase(TestCase): + def test_velocidade_inicial(self): + motor = Motor() + self.assertEqual(0, motor.velocidade) + + def test_acelerar(self): + motor = Motor() + motor.acelerar() + self.assertEqual(1, motor.velocidade) \ No newline at end of file diff --git a/oo/test_direcao.py b/oo/test_direcao.py new file mode 100644 index 000000000..a354a51fd --- /dev/null +++ b/oo/test_direcao.py @@ -0,0 +1,28 @@ +from unittest import TestCase +from carro import Direcao + +class DirecaoTestCase(TestCase): + def test_direcao(self): + direcao = Direcao() + direcao.valor + + # Testando girar_a_direita + self.assertEqual('Norte', direcao.valor) + direcao.girar_a_direita() + self.assertEqual('Leste', direcao.valor) + direcao.girar_a_direita() + self.assertEqual('Sul', direcao.valor) + direcao.girar_a_direita() + self.assertEqual('Oeste', direcao.valor) + direcao.girar_a_direita() + self.assertEqual('Norte', direcao.valor) + + # Testando girar_a_esquerda + direcao.girar_a_esquerda() + self.assertEqual('Oeste', direcao.valor) + direcao.girar_a_esquerda() + self.assertEqual('Sul', direcao.valor) + direcao.girar_a_esquerda() + self.assertEqual('Leste', direcao.valor) + direcao.girar_a_esquerda() + self.assertEqual('Norte', direcao.valor) diff --git a/oo/test_motor.py b/oo/test_motor.py new file mode 100644 index 000000000..4c925681a --- /dev/null +++ b/oo/test_motor.py @@ -0,0 +1,17 @@ +from unittest import TestCase +from carro import Motor + +class MotorTestCase(TestCase): + def test_velocidade(self): + motor = Motor() + self.assertEqual(0, motor.velocidade) + motor.acelerar() + self.assertEqual(1, motor.velocidade) + motor.acelerar() + self.assertEqual(2, motor.velocidade) + motor.acelerar() + self.assertEqual(3, motor.velocidade) + motor.frear() + self.assertEqual(1, motor.velocidade) + motor.frear() + self.assertEqual(0, motor.velocidade) diff --git a/testes/atores_testes.py b/testes/test_atores.py similarity index 100% rename from testes/atores_testes.py rename to testes/test_atores.py diff --git a/testes/fase_testes.py b/testes/test_fase.py similarity index 100% rename from testes/fase_testes.py rename to testes/test_fase.py diff --git a/testes/integracao.py b/testes/test_integracao.py similarity index 100% rename from testes/integracao.py rename to testes/test_integracao.py diff --git a/testes/testes_placa_grafica.py b/testes/test_placa_grafica.py similarity index 100% rename from testes/testes_placa_grafica.py rename to testes/test_placa_grafica.py From e27d0aee19b6fca5a3cd2939b6d097071ac9ad17 Mon Sep 17 00:00:00 2001 From: Adao Oliveira Date: Thu, 28 May 2020 10:49:36 -0300 Subject: [PATCH 13/14] =?UTF-8?q?Corre=C3=A7=C3=A3o=20dos=20testes=20da=20?= =?UTF-8?q?classe=20Ator?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- atores.py | 15 +++++++++++---- testes/test_atores.py | 18 +++++++++--------- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/atores.py b/atores.py index cfc2ef5ea..176316b2d 100644 --- a/atores.py +++ b/atores.py @@ -1,7 +1,6 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals - import math DESTRUIDO = 'Destruido' @@ -46,14 +45,22 @@ def colidir(self, outro_ator, intervalo=1): Só deve haver colisão se os dois atores tiverem seus status ativos. Para colisão, é considerado um quadrado, com lado igual ao parâmetro intervalo, em volta do ponto onde se encontra o ator. Se os atores estiverem dentro desse mesmo quadrado, seus status devem ser alterados para - destruido, seus caracteres para destruido também. + DESTRUIDO, seus caracteres para destruido (' ') também. :param outro_ator: Ator a ser considerado na colisão :param intervalo: Intervalo a ser considerado :return: """ - pass + if self.status == DESTRUIDO or outro_ator.status == DESTRUIDO: + return + + condicoes = [ + abs(self.x - outro_ator.x) <= intervalo, + abs(self.y - outro_ator.y) <= intervalo, + ] + if all(condicoes): + self.status = outro_ator.status = DESTRUIDO class Obstaculo(Ator): @@ -122,7 +129,7 @@ def calcular_posicao(self, tempo): def lancar(self, angulo, tempo_de_lancamento): """ - Lógica que lança o pássaro. Deve armazenar o ângulo e o tempo de lançamento para posteriores cálculo. + Lógica que lança o pássaro. Deve armazenar o ângulo e o tempo de lançamento para posterior cálculo. O ângulo é passado em graus e deve ser transformado em radianos :param angulo: diff --git a/testes/test_atores.py b/testes/test_atores.py index f4254f29e..4565dcbdf 100644 --- a/testes/test_atores.py +++ b/testes/test_atores.py @@ -34,14 +34,14 @@ def teste_ator_posicao(self): 'Teste que verifica que o ator comum não deve se mover independente do tempo do jogo' ator = Ator() x, y = ator.calcular_posicao(0) - self.assertEqual(0, x) - self.assertEqual(0, y) + # O método 'calcular_posicao()' de Ator é criado com retorno padrão de (1, 1) + self.assertEqual(1, x) + self.assertEqual(1, y) ator = Ator(0.3, 0.5) x, y = ator.calcular_posicao(10) - self.assertEqual(0.3, x) - self.assertEqual(0.5, y) - + self.assertEqual(1, x) + self.assertEqual(1, y) def teste_colisao_entre_atores_ativos(self): """ @@ -113,7 +113,7 @@ def test_caracter(self): def assert_colisao_atores_ativos(self, ator, ator2, intervalo=1): """ Se certifica que há colisão entre atores ativos - Atenção: Esse não é método de teste porque nao se inicia com prefixo "text". + Atenção: Esse não é método de teste porque nao se inicia com prefixo "teste_". Ele serve apenas para encapsular toda lógica de teste de colisão entre dois atores ativos """ # Conferindo status dos dois atores antes da colisão @@ -126,10 +126,10 @@ def assert_colisao_atores_ativos(self, ator, ator2, intervalo=1): def assert_nao_colisao(self, ator, ator2): """ - Se certifica que não colisão entre dois atores - Atenção: Esse não é método de teste porque nao se inicia com prefixo "text". + Se certifica que não há colisão entre dois atores + Atenção: Esse não é método de teste porque nao se inicia com prefixo "teste_". Ele apenas encapsula a lógica de não colisão entre dois atores. - So seja, eles deve manter seus respectivos status mesmo depois da chamada do metodo colidir + Ou seja, eles devem manter seus respectivos status, mesmo depois da chamada do metodo colidir() """ # Armazenando status antes da colisão status_inicial_ator = ator.status From 7ec3432319c810ffb5798c190c231a4d3d638974 Mon Sep 17 00:00:00 2001 From: Adao Oliveira Date: Thu, 28 May 2020 17:17:27 -0300 Subject: [PATCH 14/14] =?UTF-8?q?Corre=C3=A7=C3=A3o=20parcial=20dos=20test?= =?UTF-8?q?es=20usando=20AtorFake?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- atores.py | 8 ++++---- fase.py | 19 ++++++++++++++++++- oo/pessoa.py | 8 ++++++-- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/atores.py b/atores.py index 176316b2d..300e3e248 100644 --- a/atores.py +++ b/atores.py @@ -64,11 +64,11 @@ def colidir(self, outro_ator, intervalo=1): class Obstaculo(Ator): - pass + _caracter_ativo = 'O' class Porco(Ator): - pass + _caracter_ativo = '@' class DuploLancamentoExcecao(Exception): @@ -140,8 +140,8 @@ def lancar(self, angulo, tempo_de_lancamento): class PassaroAmarelo(Passaro): - pass + _caracter_ativo = 'A' class PassaroVermelho(Passaro): - pass \ No newline at end of file + _caracter_ativo = 'V' diff --git a/fase.py b/fase.py index 1c8fd161f..76ec120e9 100644 --- a/fase.py +++ b/fase.py @@ -73,7 +73,13 @@ def status(self): :return: """ - return EM_ANDAMENTO + if not self._possui_porco_ativo(): + return VITORIA + elif self._possui_passaro_ativo(): + return EM_ANDAMENTO + else: + return DERROTA + def lancar(self, angulo, tempo): """ @@ -105,3 +111,14 @@ def calcular_pontos(self, tempo): def _transformar_em_ponto(self, ator): return Ponto(ator.x, ator.y, ator.caracter()) + def _possui_porco_ativo(self): + for porco in self._porcos: + if porco.status == ATIVO: + return True + return False + + def _possui_passaro_ativo(self): + for passaro in self._passaros: + if passaro.status == ATIVO: + return True + return False diff --git a/oo/pessoa.py b/oo/pessoa.py index 6487e2e37..e34f3ccdd 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -11,7 +11,7 @@ def __init__(self, *filhos, nome=None, idade=0): self.filhos = list(filhos) def cumprimentar(self): - return f"Ola {id(self)}" + return f"Ola, meu nome é {self.nome}" def __repr__(self): txtSaida = f"Meu nome é {self.nome} e tenho {self.idade} anos" @@ -25,7 +25,8 @@ def __repr__(self): class Homem(Pessoa): - pass + def cumprimentar(self): + return f"{super().cumprimentar()}. Aperto de mão" if __name__ == '__main__': @@ -62,4 +63,7 @@ class Homem(Pessoa): print(pai.temDeficiencia) print(mae.temDeficiencia) + print(pai.cumprimentar()) + print(mae.cumprimentar()) +