From 2b4c8a9d250616a5936cdc91278eb2168361e3a9 Mon Sep 17 00:00:00 2001 From: jose Date: Fri, 3 Jan 2020 18:20:53 -0300 Subject: [PATCH 01/25] criada a classe pessoa em oo --- oo/__init__.py | 0 oo/pessoa.py | 2 ++ 2 files changed, 2 insertions(+) create mode 100644 oo/__init__.py create mode 100644 oo/pessoa.py 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..fdea9a5e0 --- /dev/null +++ b/oo/pessoa.py @@ -0,0 +1,2 @@ +class Pessoa(): + pass From f8430e3505bc86d9050c2e3b314d67ed734a55c5 Mon Sep 17 00:00:00 2001 From: jose Date: Fri, 3 Jan 2020 19:06:10 -0300 Subject: [PATCH 02/25] criada a classe pessoa em oo --- oo/__init__.py | 0 oo/pessoa.py | 2 ++ 2 files changed, 2 insertions(+) create mode 100644 oo/__init__.py create mode 100644 oo/pessoa.py 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..fdea9a5e0 --- /dev/null +++ b/oo/pessoa.py @@ -0,0 +1,2 @@ +class Pessoa(): + pass From 546c413d0d2de6b30fadec5c52b9a08415ee8c04 Mon Sep 17 00:00:00 2001 From: jose Date: Sat, 4 Jan 2020 08:56:05 -0300 Subject: [PATCH 03/25] =?UTF-8?q?criado=20m=C3=A9todo=20cumprimentar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oo/pessoa.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/oo/pessoa.py b/oo/pessoa.py index fdea9a5e0..8889d701c 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -1,2 +1,9 @@ class Pessoa(): - pass + def cumprimentar(self): + return f' Olá, id={id(self)}' + +if __name__ == '__main__': + p = Pessoa() + print(Pessoa.cumprimentar(p)) + print(id(p)) + print(p.cumprimentar()) From 950a6f9079e3c1f0697300d724f915009978fd19 Mon Sep 17 00:00:00 2001 From: jose Date: Sun, 5 Jan 2020 12:06:47 -0300 Subject: [PATCH 04/25] =?UTF-8?q?criados=20atributos=20de=20inst=C3=A3ncia?= =?UTF-8?q?=20nome=20e=20idade?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oo/pessoa.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/oo/pessoa.py b/oo/pessoa.py index 8889d701c..1ca4069ff 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -1,9 +1,19 @@ class Pessoa(): + def __init__(self, nome = None, idade=None): + self.idade = idade + self.nome = nome + def cumprimentar(self): return f' Olá, id={id(self)}' + if __name__ == '__main__': - p = Pessoa() + p = Pessoa('ronaldo') print(Pessoa.cumprimentar(p)) print(id(p)) print(p.cumprimentar()) + print(p.nome) + p.nome = 'jose' + p.idade=51 + print(p.nome) + print(p.idade) From b19473e6434eaee09c58f99b7d71b1e3c6b16924 Mon Sep 17 00:00:00 2001 From: jose Date: Fri, 10 Jan 2020 19:57:01 -0300 Subject: [PATCH 05/25] criado atributo complexo filho --- oo/pessoa.py | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/oo/pessoa.py b/oo/pessoa.py index 1ca4069ff..a3fab2cce 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -1,19 +1,21 @@ class Pessoa(): - def __init__(self, nome = None, idade=None): + def __init__(self, *filhos, nome = None, idade=51): self.idade = idade self.nome = nome + self.filhos = list(filhos) def cumprimentar(self): return f' Olá, id={id(self)}' if __name__ == '__main__': - p = Pessoa('ronaldo') - print(Pessoa.cumprimentar(p)) - print(id(p)) - print(p.cumprimentar()) - print(p.nome) - p.nome = 'jose' - p.idade=51 - print(p.nome) - print(p.idade) + yaya = Pessoa(nome='yaya') + ronaldo = Pessoa(yaya, nome='ronaldo') + print(Pessoa.cumprimentar(ronaldo)) + print(id(ronaldo)) + print(ronaldo.cumprimentar()) + print(ronaldo.nome) + print(ronaldo.idade) + for filho in ronaldo.filhos: + print(filho.nome) + From 6e5761bb6ef2e2269bf9734c8d369ae1387e1d95 Mon Sep 17 00:00:00 2001 From: jose Date: Fri, 10 Jan 2020 20:12:47 -0300 Subject: [PATCH 06/25] =?UTF-8?q?criado=20e=20removido=20atributo=20din?= =?UTF-8?q?=C3=A2mico=20de=20objeto=20do=20tipo=20pessoa?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oo/pessoa.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/oo/pessoa.py b/oo/pessoa.py index a3fab2cce..7bbf4b81f 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -18,4 +18,8 @@ def cumprimentar(self): print(ronaldo.idade) for filho in ronaldo.filhos: print(filho.nome) - + ronaldo.sobrenome = 'vieira' + del ronaldo.filhos + print(ronaldo.__dict__) + print(yaya.__dict__) + \ No newline at end of file From 4cbc05e96cca0a335d069b333873386af066a090 Mon Sep 17 00:00:00 2001 From: jose Date: Sat, 11 Jan 2020 08:28:07 -0300 Subject: [PATCH 07/25] criado atributo de classe olhos --- oo/pessoa.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/oo/pessoa.py b/oo/pessoa.py index 7bbf4b81f..3a8ebe0f9 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -1,4 +1,6 @@ class Pessoa(): + olhos=2 + def __init__(self, *filhos, nome = None, idade=51): self.idade = idade self.nome = nome @@ -20,6 +22,12 @@ def cumprimentar(self): print(filho.nome) ronaldo.sobrenome = 'vieira' del ronaldo.filhos + ronaldo.olhos = 1 + del ronaldo.olhos print(ronaldo.__dict__) print(yaya.__dict__) - \ No newline at end of file + Pessoa.olhos = 3 + print(Pessoa.olhos) + print(ronaldo.olhos) + print(yaya.olhos) + print(id(Pessoa.olhos), id(ronaldo.olhos), id(yaya.olhos)) \ No newline at end of file From ed906daaf4683b5183cd26e59b349e8f133eea4e Mon Sep 17 00:00:00 2001 From: jose Date: Sat, 11 Jan 2020 09:10:09 -0300 Subject: [PATCH 08/25] =?UTF-8?q?criado=20m=C3=A9todo=20de=20classe=20com?= =?UTF-8?q?=20utiliza=C3=A7=C3=A3o=20de=20@classmethod=20e=20@staticmethod?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oo/pessoa.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/oo/pessoa.py b/oo/pessoa.py index 3a8ebe0f9..e2682f33e 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -9,6 +9,14 @@ def __init__(self, *filhos, nome = None, idade=51): def cumprimentar(self): return f' Olá, id={id(self)}' + @staticmethod + def metodo_estatico(): + return 7*6 + + @classmethod + def nome_e_atributos_de_classe(cls): + return f'{cls}-olhos{cls.olhos}' + if __name__ == '__main__': yaya = Pessoa(nome='yaya') @@ -30,4 +38,6 @@ def cumprimentar(self): print(Pessoa.olhos) print(ronaldo.olhos) print(yaya.olhos) - print(id(Pessoa.olhos), id(ronaldo.olhos), id(yaya.olhos)) \ No newline at end of file + print(id(Pessoa.olhos), id(ronaldo.olhos), id(yaya.olhos)) + print(Pessoa.metodo_estatico(),'e', ronaldo.metodo_estatico()) + print(Pessoa.nome_e_atributos_de_classe(), 'e', ronaldo.nome_e_atributos_de_classe()) \ No newline at end of file From 58552383666d79bd0683555045082fd9d2eb4dc2 Mon Sep 17 00:00:00 2001 From: jose Date: Sat, 11 Jan 2020 09:13:38 -0300 Subject: [PATCH 09/25] =?UTF-8?q?criado=20m=C3=A9todo=20de=20classe=20com?= =?UTF-8?q?=20utiliza=C3=A7=C3=A3o=20de=20@classmethod=20e=20@staticmethod?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oo/pessoa.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oo/pessoa.py b/oo/pessoa.py index e2682f33e..989cda5e9 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -40,4 +40,4 @@ def nome_e_atributos_de_classe(cls): print(yaya.olhos) print(id(Pessoa.olhos), id(ronaldo.olhos), id(yaya.olhos)) print(Pessoa.metodo_estatico(),'e', ronaldo.metodo_estatico()) - print(Pessoa.nome_e_atributos_de_classe(), 'e', ronaldo.nome_e_atributos_de_classe()) \ No newline at end of file + print(Pessoa.nome_e_atributos_de_classe(), 'e', ronaldo.nome_e_atributos_de_classe()) From 11fe2480b857ee28442116999c6044aa96720a02 Mon Sep 17 00:00:00 2001 From: jose Date: Sat, 11 Jan 2020 09:16:05 -0300 Subject: [PATCH 10/25] =?UTF-8?q?criado=20m=C3=A9todo=20de=20classe=20com?= =?UTF-8?q?=20utiliza=C3=A7=C3=A3o=20de=20@classmethod=20e=20@staticmethod?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oo/pessoa.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oo/pessoa.py b/oo/pessoa.py index 989cda5e9..e2682f33e 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -40,4 +40,4 @@ def nome_e_atributos_de_classe(cls): print(yaya.olhos) print(id(Pessoa.olhos), id(ronaldo.olhos), id(yaya.olhos)) print(Pessoa.metodo_estatico(),'e', ronaldo.metodo_estatico()) - print(Pessoa.nome_e_atributos_de_classe(), 'e', ronaldo.nome_e_atributos_de_classe()) + print(Pessoa.nome_e_atributos_de_classe(), 'e', ronaldo.nome_e_atributos_de_classe()) \ No newline at end of file From 6dadf5c595de026264844225f5679db4b7be4575 Mon Sep 17 00:00:00 2001 From: jose Date: Sun, 12 Jan 2020 09:54:03 -0300 Subject: [PATCH 11/25] =?UTF-8?q?Implementada=20Dire=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oo/carro_teste.py | 128 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 oo/carro_teste.py diff --git a/oo/carro_teste.py b/oo/carro_teste.py new file mode 100644 index 000000000..6e32bbeab --- /dev/null +++ b/oo/carro_teste.py @@ -0,0 +1,128 @@ +""" +Você 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: + +1) Atributo de dado velocidade +2) Método acelerar, que deverá incremetar a velocidade de uma unidade +3) Método frear que deverá decrementar a velocidade em duas unidades + + +A Direção terá a responsabilidade de controlar a direção. Ela oferece +os seguintes atributos: +1) Valor de diração com valores possíveis: Norte, Sul, Leste, Oeste. +2) Método girar_a_direita +3) Método girar_a_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 Direcao + >>> 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' + >>> carro = Carro(direcao, motor) + >>> 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'""" + +NORTE='Norte' +SUL='Sul' +LESTE='Leste' +OESTE='Oeste' + +class Motor: + def __init__(self): + self.velocidade = 0 + + def acelerar(self): + self.velocidade += 1 + + def frear(self): + self.velocidade -= 2 + self.velocidade = max(0, self.velocidade) + +class Direcao(): + + rotacao_a_direita_dct={NORTE:LESTE, LESTE:SUL, SUL:OESTE, OESTE:NORTE} + rotacao_a_esquerda_dct = {NORTE: OESTE, LESTE: NORTE, SUL: LESTE, OESTE: SUL} + + def __init__(self): + self.valor = NORTE + + def girar_a_direita(self): + self.valor = self.rotacao_a_direita_dct[self.valor] + + def girar_a_esquerda(self): + self.valor = self.rotacao_a_esquerda_dct[self.valor] + + From 96b43981bf60ffefc90f98a4d9c69803b36fc488 Mon Sep 17 00:00:00 2001 From: jose Date: Sun, 12 Jan 2020 16:57:55 -0300 Subject: [PATCH 12/25] =?UTF-8?q?Implementada=20Dire=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oo/carro_teste.py | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/oo/carro_teste.py b/oo/carro_teste.py index 6e32bbeab..84b59b0c6 100644 --- a/oo/carro_teste.py +++ b/oo/carro_teste.py @@ -93,13 +93,37 @@ 'Norte' >>> carro.girar_a_esquerda() >>> carro.calcular_direcao() - 'Oeste'""" + 'Oeste' + """ NORTE='Norte' SUL='Sul' LESTE='Leste' OESTE='Oeste' +class Carro: + def __init__(self, direcao, motor): + self.direcao = direcao + self.motor = motor + + 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() + class Motor: def __init__(self): self.velocidade = 0 @@ -113,7 +137,7 @@ def frear(self): class Direcao(): - rotacao_a_direita_dct={NORTE:LESTE, LESTE:SUL, SUL:OESTE, OESTE:NORTE} + rotacao_a_direita_dct = {NORTE:LESTE, LESTE:SUL, SUL:OESTE, OESTE:NORTE} rotacao_a_esquerda_dct = {NORTE: OESTE, LESTE: NORTE, SUL: LESTE, OESTE: SUL} def __init__(self): From 1f4efa08c6cf22365b11c75022a17d5064e70c5a Mon Sep 17 00:00:00 2001 From: jose Date: Sun, 12 Jan 2020 17:38:13 -0300 Subject: [PATCH 13/25] Implementada classe carro --- oo/carro_teste.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oo/carro_teste.py b/oo/carro_teste.py index 84b59b0c6..3d4a1cd9d 100644 --- a/oo/carro_teste.py +++ b/oo/carro_teste.py @@ -137,7 +137,7 @@ def frear(self): class Direcao(): - rotacao_a_direita_dct = {NORTE:LESTE, LESTE:SUL, SUL:OESTE, OESTE:NORTE} + rotacao_a_direita_dct = {NORTE:LESTE, LESTE:SUL, SUL:OESTE, OESTE:NORTE} rotacao_a_esquerda_dct = {NORTE: OESTE, LESTE: NORTE, SUL: LESTE, OESTE: SUL} def __init__(self): From 7fe79fb8f48b4656c82d0b924cd6ea51dec38d59 Mon Sep 17 00:00:00 2001 From: jose Date: Sun, 12 Jan 2020 18:34:22 -0300 Subject: [PATCH 14/25] =?UTF-8?q?Implementada=20fase.py=20acrescentadno=20?= =?UTF-8?q?obst=C3=A1culos,=20porcos=20e=20aves=20e=20utilizando=20placa?= =?UTF-8?q?=20gr=C3=A1fica=20tkinter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fase.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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): """ From ca0289729a06cd1a46af204ba65814fafab6528b Mon Sep 17 00:00:00 2001 From: jose Date: Thu, 16 Jan 2020 22:14:54 -0300 Subject: [PATCH 15/25] =?UTF-8?q?estudo=20inicial=20sobre=20heran=C3=A7a?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oo/pessoa.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/oo/pessoa.py b/oo/pessoa.py index e2682f33e..99acb3201 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -18,9 +18,15 @@ def nome_e_atributos_de_classe(cls): return f'{cls}-olhos{cls.olhos}' +class Homem(Pessoa): + pass + +class Mulher(Pessoa): + pass + if __name__ == '__main__': - yaya = Pessoa(nome='yaya') - ronaldo = Pessoa(yaya, nome='ronaldo') + yaya = Mulher(nome='yaya') + ronaldo = Homem(yaya, nome='ronaldo') print(Pessoa.cumprimentar(ronaldo)) print(id(ronaldo)) print(ronaldo.cumprimentar()) @@ -40,4 +46,9 @@ def nome_e_atributos_de_classe(cls): print(yaya.olhos) print(id(Pessoa.olhos), id(ronaldo.olhos), id(yaya.olhos)) print(Pessoa.metodo_estatico(),'e', ronaldo.metodo_estatico()) - print(Pessoa.nome_e_atributos_de_classe(), 'e', ronaldo.nome_e_atributos_de_classe()) \ No newline at end of file + print(Pessoa.nome_e_atributos_de_classe(), 'e', ronaldo.nome_e_atributos_de_classe()) + pessoa=Pessoa('Anônimo') + print(isinstance(pessoa, Pessoa)) + print(isinstance(pessoa, Homem)) + print(isinstance(ronaldo, Pessoa)) + print(isinstance(ronaldo, Homem)) \ No newline at end of file From 798d684130606ee5f1f0f9a04043e17bf3323ac3 Mon Sep 17 00:00:00 2001 From: jose Date: Sat, 18 Jan 2020 19:08:37 -0300 Subject: [PATCH 16/25] estudo inicial sobre unittest --- oo/carro_teste.py | 152 ---------------------------------------------- 1 file changed, 152 deletions(-) delete mode 100644 oo/carro_teste.py diff --git a/oo/carro_teste.py b/oo/carro_teste.py deleted file mode 100644 index 3d4a1cd9d..000000000 --- a/oo/carro_teste.py +++ /dev/null @@ -1,152 +0,0 @@ -""" -Você 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: - -1) Atributo de dado velocidade -2) Método acelerar, que deverá incremetar a velocidade de uma unidade -3) Método frear que deverá decrementar a velocidade em duas unidades - - -A Direção terá a responsabilidade de controlar a direção. Ela oferece -os seguintes atributos: -1) Valor de diração com valores possíveis: Norte, Sul, Leste, Oeste. -2) Método girar_a_direita -3) Método girar_a_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 Direcao - >>> 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' - >>> carro = Carro(direcao, motor) - >>> 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' - """ - -NORTE='Norte' -SUL='Sul' -LESTE='Leste' -OESTE='Oeste' - -class Carro: - def __init__(self, direcao, motor): - self.direcao = direcao - self.motor = motor - - 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() - -class Motor: - def __init__(self): - self.velocidade = 0 - - def acelerar(self): - self.velocidade += 1 - - def frear(self): - self.velocidade -= 2 - self.velocidade = max(0, self.velocidade) - -class Direcao(): - - rotacao_a_direita_dct = {NORTE:LESTE, LESTE:SUL, SUL:OESTE, OESTE:NORTE} - rotacao_a_esquerda_dct = {NORTE: OESTE, LESTE: NORTE, SUL: LESTE, OESTE: SUL} - - def __init__(self): - self.valor = NORTE - - def girar_a_direita(self): - self.valor = self.rotacao_a_direita_dct[self.valor] - - def girar_a_esquerda(self): - self.valor = self.rotacao_a_esquerda_dct[self.valor] - - From 78800419387a8b5c93c65b403c791424608cd824 Mon Sep 17 00:00:00 2001 From: jose Date: Sun, 26 Jan 2020 09:24:16 -0300 Subject: [PATCH 17/25] estudo sobrescrita de atributo --- atores.py | 6 +++--- oo/pessoa.py | 13 ++++++++++--- testes/{atores_testes.py => testes_atores.py} | 0 3 files changed, 13 insertions(+), 6 deletions(-) rename testes/{atores_testes.py => testes_atores.py} (100%) diff --git a/atores.py b/atores.py index cfc2ef5ea..bd59f9440 100644 --- a/atores.py +++ b/atores.py @@ -57,11 +57,11 @@ def colidir(self, outro_ator, intervalo=1): class Obstaculo(Ator): - pass + _caracter_ativo = 'O' class Porco(Ator): - pass + _caracter_ativo = "@" class DuploLancamentoExcecao(Exception): @@ -137,4 +137,4 @@ class PassaroAmarelo(Passaro): class PassaroVermelho(Passaro): - pass \ No newline at end of file + _caracter_ativo = 'V' \ No newline at end of file diff --git a/oo/pessoa.py b/oo/pessoa.py index 99acb3201..de19e99dd 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -21,12 +21,16 @@ def nome_e_atributos_de_classe(cls): class Homem(Pessoa): pass +class Mutante(Pessoa): + olhos=3 + class Mulher(Pessoa): pass if __name__ == '__main__': + ronaldo = Mutante(nome='ronaldo') yaya = Mulher(nome='yaya') - ronaldo = Homem(yaya, nome='ronaldo') + ronaldo = Mutante(yaya, nome='ronaldo') print(Pessoa.cumprimentar(ronaldo)) print(id(ronaldo)) print(ronaldo.cumprimentar()) @@ -40,7 +44,6 @@ class Mulher(Pessoa): del ronaldo.olhos print(ronaldo.__dict__) print(yaya.__dict__) - Pessoa.olhos = 3 print(Pessoa.olhos) print(ronaldo.olhos) print(yaya.olhos) @@ -51,4 +54,8 @@ class Mulher(Pessoa): print(isinstance(pessoa, Pessoa)) print(isinstance(pessoa, Homem)) print(isinstance(ronaldo, Pessoa)) - print(isinstance(ronaldo, Homem)) \ No newline at end of file + print(isinstance(ronaldo, Homem)) + print(yaya.olhos) + print('Digite uma palavra e pressione enter') + input('-->') + print(ronaldo.olhos) \ No newline at end of file diff --git a/testes/atores_testes.py b/testes/testes_atores.py similarity index 100% rename from testes/atores_testes.py rename to testes/testes_atores.py From b071f7794400654804b317bde8d8f02aa2206f1c Mon Sep 17 00:00:00 2001 From: jose Date: Sun, 2 Feb 2020 10:34:36 -0300 Subject: [PATCH 18/25] estudo sobrescrita de UNITTEST --- fase.py | 2 +- oo/pessoa.py | 5 ++++- testes/{fase_testes.py => testes_fase.py} | 0 3 files changed, 5 insertions(+), 2 deletions(-) rename testes/{fase_testes.py => testes_fase.py} (100%) diff --git a/fase.py b/fase.py index 1c8fd161f..e2d17101e 100644 --- a/fase.py +++ b/fase.py @@ -73,7 +73,7 @@ def status(self): :return: """ - return EM_ANDAMENTO + return VITORIA def lancar(self, angulo, tempo): """ diff --git a/oo/pessoa.py b/oo/pessoa.py index de19e99dd..686f13e8c 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -16,6 +16,7 @@ def metodo_estatico(): @classmethod def nome_e_atributos_de_classe(cls): return f'{cls}-olhos{cls.olhos}' + return f'Meu nome é {self.nome}' class Homem(Pessoa): @@ -58,4 +59,6 @@ class Mulher(Pessoa): print(yaya.olhos) print('Digite uma palavra e pressione enter') input('-->') - print(ronaldo.olhos) \ No newline at end of file + print(ronaldo.olhos) + print(yaya.cumprimentar()) + print(ronaldo.cumprimentar()) \ No newline at end of file diff --git a/testes/fase_testes.py b/testes/testes_fase.py similarity index 100% rename from testes/fase_testes.py rename to testes/testes_fase.py From e114920e70ec1072781bc986a8b266323d2d9fe5 Mon Sep 17 00:00:00 2001 From: jose Date: Sat, 8 Feb 2020 08:37:50 -0300 Subject: [PATCH 19/25] =?UTF-8?q?m=C3=A9todo=20protegido?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fase.py | 21 ++++++++++++++++++++- placa_grafica.py | 2 +- placa_grafica_tkinter.py | 4 ++-- testes/integracao.py | 24 ++++++++++++------------ testes/testes_fase.py | 24 ++++++++++++------------ 5 files changed, 47 insertions(+), 28 deletions(-) diff --git a/fase.py b/fase.py index e2d17101e..9ad809419 100644 --- a/fase.py +++ b/fase.py @@ -61,6 +61,7 @@ def adicionar_passaro(self, *passaros): """ self._passaros.extend(passaros) + @property def status(self): """ Método que indica com mensagem o status do jogo @@ -73,7 +74,12 @@ def status(self): :return: """ - return VITORIA + 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,16 @@ 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/placa_grafica.py b/placa_grafica.py index 77ae67aef..1cd05cbd5 100644 --- a/placa_grafica.py +++ b/placa_grafica.py @@ -84,7 +84,7 @@ def animar(fase, passo=0.1, delta_t=0.1): velocidade_replay = 1 _animar(delta_t, fase, passo / velocidade_replay, tempo, 'Replay %s vezes mais rápido!' % velocidade_replay) apagar_tela() - print(fase.status(tempo_final)) + print(fase.status) print(FIM) diff --git a/placa_grafica_tkinter.py b/placa_grafica_tkinter.py index 318542e65..6b6a94a5f 100644 --- a/placa_grafica_tkinter.py +++ b/placa_grafica_tkinter.py @@ -59,10 +59,10 @@ def _animar(): if tempo <= 0: tempo = 0 delta_t /= -multiplicador_rebobinar - if fase.status() != EM_ANDAMENTO: + if fase.status != EM_ANDAMENTO: camada_de_atores.create_image(162, 55, image=PYTHONBIRDS_LOGO, anchor=NW) camada_de_atores.create_image(54, 540, image=MENU, anchor=NW) - if fase.status() == VITORIA: + if fase.status == VITORIA: img = VOCE_GANHOU else: img = VOCE_PERDEU diff --git a/testes/integracao.py b/testes/integracao.py index 11f2f0178..b834d465a 100644 --- a/testes/integracao.py +++ b/testes/integracao.py @@ -28,22 +28,22 @@ def teste_acabou_com_porcos_e_passaros(self): fase.adicionar_porco(*porcos) fase.adicionar_passaro(*passaros) - self.assertEqual(EM_ANDAMENTO, fase.status()) + self.assertEqual(EM_ANDAMENTO, fase.status) # colidindo cada passaro com um porco no tempo 3 for passaro, porco in zip(passaros, porcos): passaro.colidir(porco, 3) - self.assertEqual(VITORIA, fase.status()) + self.assertEqual(VITORIA, fase.status) fase.adicionar_obstaculo(Obstaculo()) - self.assertEqual(VITORIA, fase.status(), 'Obstáculo não interfere no fim do jogo') + self.assertEqual(VITORIA, fase.status, 'Obstáculo não interfere no fim do jogo') fase.adicionar_porco(Porco()) - self.assertEqual(DERROTA, fase.status(), 'Com Porco ativo e sem pássaro para lançar, o jogo deveria acabar') + self.assertEqual(DERROTA, fase.status, 'Com Porco ativo e sem pássaro para lançar, o jogo deveria acabar') fase.adicionar_passaro(PassaroAmarelo()) - self.assertEqual(EM_ANDAMENTO, fase.status(), + self.assertEqual(EM_ANDAMENTO, fase.status, 'Com Porco ativo e com pássaro para lançar, o jogo não deveria acabar') def teste_status(self): @@ -52,29 +52,29 @@ def teste_status(self): passaros = [PassaroAmarelo(1, 1) for i in range(2)] fase.adicionar_porco(*porcos) fase.adicionar_passaro(*passaros) - self.assertEqual(EM_ANDAMENTO, fase.status()) + self.assertEqual(EM_ANDAMENTO, fase.status) for passaro, porco in zip(passaros, porcos): passaro.colidir(porco, 3) - self.assertEqual(VITORIA, fase.status(), + self.assertEqual(VITORIA, fase.status, 'Sem porcos ativos o jogo deveria terminar com vitória') fase.adicionar_obstaculo(Obstaculo()) - self.assertEqual(VITORIA, fase.status(), + self.assertEqual(VITORIA, fase.status, 'Obstáculo não interfere para definir vitória') porco = Porco() fase.adicionar_porco(porco) - self.assertEqual(DERROTA, fase.status(), + self.assertEqual(DERROTA, fase.status, 'Com Porco ativo e sem pássaro para lançar, o jogo deveria acabar em derrota') fase.adicionar_passaro(PassaroAmarelo()) - self.assertEqual(EM_ANDAMENTO, fase.status(), + self.assertEqual(EM_ANDAMENTO, fase.status, 'Com Porco ativo e com pássaro para lançar, o jogo não deveria acabar') porco.colidir(porco, 3) - self.assertEqual(VITORIA, fase.status(), + self.assertEqual(VITORIA, fase.status, 'Sem porco ativo, o jogo deveria acabar com vitória') def teste_lancar_passaro_sem_erro_quando_nao_existe_passaro(self): @@ -166,7 +166,7 @@ def teste_calcular_pontos(self): self.assertSetEqual(expected, set(fase_exemplo.calcular_pontos(8.5))) - self.assertEqual(VITORIA, fase_exemplo.status()) + self.assertEqual(VITORIA, fase_exemplo.status) def criar_fase_exemplo(multiplicador=1): diff --git a/testes/testes_fase.py b/testes/testes_fase.py index 8158a43f5..18a5523d8 100644 --- a/testes/testes_fase.py +++ b/testes/testes_fase.py @@ -102,7 +102,7 @@ def teste_adicionar_passaro(self): def teste_acabou_sem_porcos(self): fase = Fase() - self.assertEqual(VITORIA, fase.status()) + self.assertEqual(VITORIA, fase.status) def teste_acabou_com_porcos_e_passaros(self): fase = Fase() @@ -111,23 +111,23 @@ def teste_acabou_com_porcos_e_passaros(self): fase.adicionar_porco(*porcos) fase.adicionar_passaro(*passaros) - self.assertEqual(EM_ANDAMENTO, fase.status()) + self.assertEqual(EM_ANDAMENTO, fase.status) for ator in porcos + passaros: ator.status = DESTRUIDO - self.assertEqual(VITORIA, fase.status()) + self.assertEqual(VITORIA, fase.status) fase.adicionar_obstaculo(Obstaculo()) - self.assertEqual(VITORIA, fase.status(), + self.assertEqual(VITORIA, fase.status, 'Obstáculo não interfere no fim do jogo') fase.adicionar_porco(PorcoFake()) - self.assertEqual(DERROTA, fase.status(), + self.assertEqual(DERROTA, fase.status, 'Com Porco ativo e sem pássaro para lançar, o jogo ' 'deveria acabar') fase.adicionar_passaro(PassaroFake()) - self.assertEqual(EM_ANDAMENTO, fase.status(), + self.assertEqual(EM_ANDAMENTO, fase.status, 'Com Porco ativo e com pássaro para lançar, o jogo ' 'não deveria acabar') @@ -137,31 +137,31 @@ def teste_status(self): passaros = [PassaroFake(1, 1) for _ in range(2)] fase.adicionar_porco(*porcos) fase.adicionar_passaro(*passaros) - self.assertEqual(EM_ANDAMENTO, fase.status()) + self.assertEqual(EM_ANDAMENTO, fase.status) for ator in porcos + passaros: ator.status = DESTRUIDO - self.assertEqual(VITORIA, fase.status(), + self.assertEqual(VITORIA, fase.status, 'Sem porcos ativos o jogo deveria terminar com ' 'vitória') fase.adicionar_obstaculo(ObstaculoFake()) - self.assertEqual(VITORIA, fase.status(), + self.assertEqual(VITORIA, fase.status, 'Obstáculo não interfere para definir vitória') porco = PorcoFake() fase.adicionar_porco(porco) - self.assertEqual(DERROTA, fase.status(), + self.assertEqual(DERROTA, fase.status, 'Com Porco ativo e sem pássaro para lançar, o jogo ' 'deveria acabar em derrota') fase.adicionar_passaro(PassaroFake()) - self.assertEqual(EM_ANDAMENTO, fase.status(), + self.assertEqual(EM_ANDAMENTO, fase.status, 'Com Porco ativo e com pássaro para lançar, o jogo ' 'não deveria acabar') porco.status = DESTRUIDO - self.assertEqual(VITORIA, fase.status(), + self.assertEqual(VITORIA, fase.status, 'Sem porco ativo, o jogo deveria acabar com vitória') def teste_lancar_passaro_sem_erro_quando_nao_existe_passaro(self): From 2cff2b72482e8864d5df9dba9072ed326ea2f1c2 Mon Sep 17 00:00:00 2001 From: jose Date: Sat, 8 Feb 2020 21:39:22 -0300 Subject: [PATCH 20/25] estudo ciclo de vida --- fase.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/fase.py b/fase.py index 9ad809419..ea224e3a7 100644 --- a/fase.py +++ b/fase.py @@ -92,8 +92,10 @@ def lancar(self, angulo, tempo): :param angulo: ângulo de lançamento :param tempo: Tempo de lançamento """ - pass - + for passaro in self._passaros: + if not passaro.foi_lancado(): + passaro.lancar(angulo, tempo) + break def calcular_pontos(self, tempo): """ From 9aac54bee6553987fb42a1657e82e1b460fdb956 Mon Sep 17 00:00:00 2001 From: jose Date: Fri, 14 Feb 2020 20:47:24 -0300 Subject: [PATCH 21/25] estudo fase completa --- fase.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/fase.py b/fase.py index ea224e3a7..ebbb32b54 100644 --- a/fase.py +++ b/fase.py @@ -106,6 +106,11 @@ def calcular_pontos(self, tempo): :param tempo: tempo para o qual devem ser calculados os pontos :return: objeto do tipo Ponto """ + for passaro in self._passaros: + passaro.calcular_posicao(tempo) + for alvo in self._obstaculos + self._porcos: + passaro.colidir(alvo, self.intervalo_de_colisao) + passaro.colidir_com_chao() pontos=[self._transformar_em_ponto(a) for a in self._passaros+self._obstaculos+self._porcos] return pontos From 5301365fa3638f70518b6c04c58a8f67d49f2277 Mon Sep 17 00:00:00 2001 From: jose Date: Sat, 15 Feb 2020 12:21:56 -0300 Subject: [PATCH 22/25] estudo fase completa --- atores.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atores.py b/atores.py index bd59f9440..b65e518d3 100644 --- a/atores.py +++ b/atores.py @@ -38,7 +38,7 @@ def calcular_posicao(self, tempo): :param tempo: o tempo do jogo :return: posição x, y do ator """ - return 1, 1 + return self.x, self.y def colidir(self, outro_ator, intervalo=1): """ From a4a15a3c7d9ffefac3937f43e481d5c2cace0fb1 Mon Sep 17 00:00:00 2001 From: jose Date: Sun, 16 Feb 2020 17:36:35 -0300 Subject: [PATCH 23/25] =?UTF-8?q?colis=C3=A3o=20entre=20atores?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- atores.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/atores.py b/atores.py index b65e518d3..7776eb474 100644 --- a/atores.py +++ b/atores.py @@ -52,7 +52,12 @@ def colidir(self, outro_ator, intervalo=1): :param intervalo: Intervalo a ser considerado :return: """ - pass + if self.status==ATIVO and outro_ator.status==ATIVO: + delta_x = abs(self.x - outro_ator.x) + delta_y = abs(self.y - outro_ator.y) + if delta_x<=intervalo and delta_y<=intervalo: + self.status=outro_ator.status=DESTRUIDO + From 31e9045cddaadb4a83420c978f1360c09bf4fad4 Mon Sep 17 00:00:00 2001 From: jose Date: Sun, 16 Feb 2020 20:47:45 -0300 Subject: [PATCH 24/25] =?UTF-8?q?classe=20p=C3=A1ssaro?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- atores.py | 7 ++++--- testes/testes_atores.py | 2 -- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/atores.py b/atores.py index 7776eb474..3a481a8a0 100644 --- a/atores.py +++ b/atores.py @@ -59,14 +59,13 @@ def colidir(self, outro_ator, intervalo=1): self.status=outro_ator.status=DESTRUIDO - - class Obstaculo(Ator): _caracter_ativo = 'O' class Porco(Ator): _caracter_ativo = "@" + _caracter_destruido = '+' class DuploLancamentoExcecao(Exception): @@ -142,4 +141,6 @@ class PassaroAmarelo(Passaro): class PassaroVermelho(Passaro): - _caracter_ativo = 'V' \ No newline at end of file + _caracter_ativo = 'V' + _caracter_destruido = 'v' + velocidade_escalar = 20 \ No newline at end of file diff --git a/testes/testes_atores.py b/testes/testes_atores.py index f4254f29e..96a4646d0 100644 --- a/testes/testes_atores.py +++ b/testes/testes_atores.py @@ -189,7 +189,6 @@ def assert_passaro_posicao(self, x_esperado, y_esperado, status_esperado, passar self.assertEqual(y_esperado, round(y_calculado), 'valor real de y = %s' % y_calculado) self.assertEqual(status_esperado, passaro.status, '(x = %s, y = %s)' % (x_calculado, y_calculado)) - class PassaroVermelhoTests(PassaroBaseTests): """ Classe de teste e Passaro Vermelho @@ -202,7 +201,6 @@ def teste_status(self): passaro_vermelho.colidir(outro_ator_na_mesma_posicao) self.assertEqual('v', passaro_vermelho.caracter()) - def teste_velocidade_escalar(self): self.assertEqual(20, PassaroVermelho.velocidade_escalar) From 74641460813924dc55a821c468286c387cc56d19 Mon Sep 17 00:00:00 2001 From: jose Date: Sun, 23 Feb 2020 10:10:57 -0300 Subject: [PATCH 25/25] lancamento vertical --- atores.py | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/atores.py b/atores.py index 3a481a8a0..eaa4253e6 100644 --- a/atores.py +++ b/atores.py @@ -97,7 +97,7 @@ def foi_lancado(self): :return: booleano """ - return True + return not self._tempo_de_lancamento is None def colidir_com_chao(self): """ @@ -121,8 +121,10 @@ def calcular_posicao(self, tempo): :param tempo: tempo de jogo a ser calculada a posição :return: posição x, y """ - return 1, 1 - + if self.foi_lancado(): + delta_t = tempo - self._tempo_de_lancamento + self._calcular_posicao_vertical(delta_t) + return super().calcular_posicao(tempo) def lancar(self, angulo, tempo_de_lancamento): """ @@ -133,11 +135,20 @@ def lancar(self, angulo, tempo_de_lancamento): :param tempo_de_lancamento: :return: """ - pass + self._angulo_de_lancamento = angulo + self._tempo_de_lancamento = tempo_de_lancamento + def _calcular_posicao_vertical(self, delta_t): + y_atual = self._y_inicial + angulo_radianos=math.radians(self._angulo_de_lancamento) + y_atual += self.velocidade_escalar * delta_t * math.sin(angulo_radianos) + y_atual -= (GRAVIDADE * (delta_t**2))/2 + self.y = y_atual class PassaroAmarelo(Passaro): - pass + _caracter_ativo = 'A' + _caracter_destruido = 'a' + velocidade_escalar = 30 class PassaroVermelho(Passaro):