From ccee5a426acd31a48d0f64172b3b0cb6c1208eb5 Mon Sep 17 00:00:00 2001 From: bapds Date: Sat, 9 May 2020 18:28:15 -0300 Subject: [PATCH 1/4] Insert first train exercise --- "Exerc\303\255cios/contagem_de_caracteres.py" | 65 +++++++++++++++++++ .../contagem_de_caracteres_dict.py" | 53 +++++++++++++++ 2 files changed, 118 insertions(+) create mode 100644 "Exerc\303\255cios/contagem_de_caracteres.py" create mode 100644 "Exerc\303\255cios/contagem_de_caracteres_dict.py" diff --git "a/Exerc\303\255cios/contagem_de_caracteres.py" "b/Exerc\303\255cios/contagem_de_caracteres.py" new file mode 100644 index 000000000..6eb9e6586 --- /dev/null +++ "b/Exerc\303\255cios/contagem_de_caracteres.py" @@ -0,0 +1,65 @@ +""" +Curso Python +""" + +def contar_caracteres(string): + """Função que retorna a quantidade de caracteres + presentes na string que recebeu. + Data 09/05/2020 BAPDS + >>> contar_carcteres('Bruno') + {b:1 + n:1 + o:1 + r:1 + u:1 + >>> contar_carcteres('abacate') + a:3 + b:1 + c:1 + e:1 + t:1 + + :param string: string a ser contada + """ + ordenar_caracteres = sorted(string.lower()) + + caracter_anterior = ordenar_caracteres[0] + contagem = 1 + resultado = {} + + for letra in ordenar_caracteres[1:]: + if letra == caracter_anterior: + contagem +=1 + else: + resultado[caracter_anterior] = contagem + caracter_anterior = letra + contagem = 1 + resultado[caracter_anterior] = contagem + return resultado + +if __name__ == "__main__": + """ + contar_caracteres('Bruno') + print() + contar_caracteres('abacate') + print() + contar_caracteres('banana') + print() + contar_caracteres('BANANA') + print() + contar_caracteres('pROPAROXÍTONA') + """ + palavras = open('/home/bapds/Documents/Curso Python Pro/palavras/palavras.txt', 'r') + palavras_contadas = open('/home/bapds/Documents/Curso Python Pro/palavras/palavras_contadas.txt', 'w') + indice = 0 + for palavra in palavras: + indice += 1 + print(f'{palavra} - {indice}') + palavras_contadas.writelines(f'{palavra} - {indice}') + + print(contar_caracteres(palavra)) + palavras_contadas.writelines(f'{contar_caracteres(palavra)}') + print() + + palavras.close() + palavras_contadas.close() \ No newline at end of file diff --git "a/Exerc\303\255cios/contagem_de_caracteres_dict.py" "b/Exerc\303\255cios/contagem_de_caracteres_dict.py" new file mode 100644 index 000000000..f6544ce85 --- /dev/null +++ "b/Exerc\303\255cios/contagem_de_caracteres_dict.py" @@ -0,0 +1,53 @@ +""" +Curso Python +""" + +def contar_caracteres(string): + """Função que retorna a quantidade de caracteres + presentes na string que recebeu. + Data 09/05/2020 BAPDS + >>> contar_carcteres('Bruno') + {'b': 1, 'r': 1, 'u': 1, 'n': 1, 'o': 1} + + >>> contar_carcteres('abacate') + {'a': 3, 'b': 1, 'c': 1, 't': 1, 'e': 1} + + :param string: string a ser contada + """ + resultado = {} + + for letra in string.lower(): + contagem = resultado.get(letra, 0) + contagem += 1 + resultado[letra] = contagem + + return resultado + + +if __name__ == "__main__": + + println(contar_caracteres('Bruno')) + print() + print(contar_caracteres('abacate')) + print() + print(contar_caracteres('banana')) + print() + print(contar_caracteres('BANANA')) + print() + print(contar_caracteres('pROPAROXÍTONA')) + """ + palavras = open('/home/bapds/Documents/Curso Python Pro/palavras/palavras.txt', 'r') + palavras_contadas = open('/home/bapds/Documents/Curso Python Pro/palavras/palavras_contadas.txt', 'w') + indice = 0 + for palavra in palavras: + indice += 1 + print(f'{palavra} - {indice}') + palavras_contadas.writelines(f'{palavra} - {indice}') + + print(contar_caracteres(palavra)) + palavras_contadas.writelines(f'{contar_caracteres(palavra)}') + print() + + palavras.close() + palavras_contadas.close() + """ \ No newline at end of file From 63d9346f698755ede0de952141badb41b0dbe197 Mon Sep 17 00:00:00 2001 From: bapds Date: Sat, 9 May 2020 18:30:05 -0300 Subject: [PATCH 2/4] teste de funcionamento do git --- "Exerc\303\255cios/Teste_do_git.py" | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 "Exerc\303\255cios/Teste_do_git.py" diff --git "a/Exerc\303\255cios/Teste_do_git.py" "b/Exerc\303\255cios/Teste_do_git.py" new file mode 100644 index 000000000..59e7dda00 --- /dev/null +++ "b/Exerc\303\255cios/Teste_do_git.py" @@ -0,0 +1,3 @@ +""" +Somente um teste +""" \ No newline at end of file From 086924546bc1e84b9fbc972241a4aada229fc982 Mon Sep 17 00:00:00 2001 From: bapds Date: Sun, 10 May 2020 21:27:32 -0300 Subject: [PATCH 3/4] =?UTF-8?q?Cria=C3=A7=C3=A3o=20do=20Exerc=C3=ADcio=20d?= =?UTF-8?q?e=20OO=20Carro?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "Exerc\303\255cios/Teste_do_git.py" | 19 ++- "Exerc\303\255cios/oo_carro.py" | 207 ++++++++++++++++++++++++++ "Exerc\303\255cios/teste_oo_carro.py" | 47 ++++++ oo/__init__.py | 0 oo/pessoa.py | 27 ++++ venv3/lib64 | 1 + venv3/pyvenv.cfg | 3 + 7 files changed, 303 insertions(+), 1 deletion(-) create mode 100644 "Exerc\303\255cios/oo_carro.py" create mode 100644 "Exerc\303\255cios/teste_oo_carro.py" create mode 100644 oo/__init__.py create mode 100644 oo/pessoa.py create mode 120000 venv3/lib64 create mode 100644 venv3/pyvenv.cfg diff --git "a/Exerc\303\255cios/Teste_do_git.py" "b/Exerc\303\255cios/Teste_do_git.py" index 59e7dda00..6c3201819 100644 --- "a/Exerc\303\255cios/Teste_do_git.py" +++ "b/Exerc\303\255cios/Teste_do_git.py" @@ -1,3 +1,20 @@ """ Somente um teste -""" \ No newline at end of file +""" + + +def tratment_string(entrada): + ex = "!.,;:?" + newtext = '' + for caracter in entrada: + for compare in ex: + if caracter == compare: + ok = False + break + ok = True + if ok: + newtext += caracter + return newtext.lower() + + +print(tratment_string(input())) diff --git "a/Exerc\303\255cios/oo_carro.py" "b/Exerc\303\255cios/oo_carro.py" new file mode 100644 index 000000000..eb4ee3e6f --- /dev/null +++ "b/Exerc\303\255cios/oo_carro.py" @@ -0,0 +1,207 @@ +""" +Você deve criar uma classe carro que vai possuir +dois atributos compostos por outras duas classes: + +Motor +Direção +O Motor terá a responsabilidade de controlar a velocidade. +Ele oferece os seguintes atributos: + +Atributo de dado velocidade +Método acelerar, que deverá incremetar a velocidade de uma unidade +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: + +Valor de diração com valores possíveis: Norte, Sul, Leste, Oeste. +Método girar_a_direita +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' +""" +class Motor: + def __init__(self, velocidade=0): + self.velocidade = velocidade + self.velocidade = max(0, self.velocidade) + + def acelerar(self): + self.velocidade += 1 + + def frear(self): + if self.velocidade >= 2: + self.velocidade -= 2 + elif self.velocidade == 1: + self.velocidade -= 1 + + +class Direcao: + def __init__(self, valor="Norte"): + self.valor = valor + + def girar_a_direita(self): + if self.valor == 'Norte': + self.valor = 'Leste' + elif self.valor == 'Leste': + self.valor = 'Sul' + elif self.valor == 'Sul': + self.valor = 'Oeste' + elif self.valor == 'Oeste': + self.valor = 'Norte' + + def girar_a_esquerda(self): + if self.valor == 'Norte': + self.valor = 'Oeste' + elif self.valor == 'Leste': + self.valor = 'Norte' + elif self.valor == 'Sul': + self.valor = 'Leste' + elif self.valor == 'Oeste': + self.valor = 'Sul' + + +class Carro: + + def __init__(self, direcao, motor): + self.direcao = direcao + self.motor = motor + + def calcular_velocidade(self): + return self.motor.velocidade + + def calcular_direcao(self): + return self.direcao.valor + + def acelerar(self): + self.motor.acelerar() + + def frear(self): + self.motor.frear() + + def girar_a_direita(self): + self.direcao.girar_a_direita() + + def girar_a_esquerda(self): + self.direcao.girar_a_esquerda() + + +if __name__ == '__main__': + motor = Motor() + print(motor.velocidade) + motor.acelerar() + print(motor.velocidade) + motor.acelerar() + print(motor.velocidade) + motor.acelerar() + print(motor.velocidade) + motor.frear() + print(motor.velocidade) + motor.frear() + print(motor.velocidade) + direcao = Direcao() + print(direcao.valor) + direcao.girar_a_direita() + print(direcao.valor) + direcao.girar_a_direita() + print(direcao.valor) + direcao.girar_a_direita() + print(direcao.valor) + direcao.girar_a_direita() + print(direcao.valor) + direcao.girar_a_esquerda() + print(direcao.valor) + direcao.girar_a_esquerda() + print(direcao.valor) + direcao.girar_a_esquerda() + print(direcao.valor) + direcao.girar_a_esquerda() + print(direcao.valor) + + carro = Carro(direcao, motor) + carro.calcular_velocidade() + carro.acelerar() + print(carro.calcular_velocidade()) + carro.acelerar() + print(carro.calcular_velocidade()) + carro.frear + print(carro.calcular_velocidade()) + print(carro.calcular_direcao()) + carro.girar_a_direita() + print(carro.calcular_direcao()) + carro.girar_a_esquerda() + print(carro.calcular_direcao()) + carro.girar_a_esquerda() + print(carro.calcular_direcao()) diff --git "a/Exerc\303\255cios/teste_oo_carro.py" "b/Exerc\303\255cios/teste_oo_carro.py" new file mode 100644 index 000000000..d0411e9e1 --- /dev/null +++ "b/Exerc\303\255cios/teste_oo_carro.py" @@ -0,0 +1,47 @@ +if __name__ == '__main__': + motor = Motor() + print(motor.velocidade) + motor.acelerar() + print(motor.velocidade) + motor.acelerar() + print(motor.velocidade) + motor.acelerar() + print(motor.velocidade) + motor.frear + print(motor.velocidade) + motor.frear + print(motor.velocidade) + direcao = Direcao() + print(direcao.valor) + + direcao.girar_a_direita() + print(direcao.valor) + direcao.girar_a_direita() + print(direcao.valor) + direcao.girar_a_direita() + print(direcao.valor) + direcao.girar_a_direita() + print(direcao.valor) + direcao.girar_a_esquerda() + print(direcao.valor) + direcao.girar_a_esquerda() + print(direcao.valor) + direcao.girar_a_esquerda() + print(direcao.valor) + direcao.girar_a_esquerda() + print(direcao.valor) + carro = Carro(direcao, motor) + carro.calcular_velocidade() + carro.acelerar() + print(carro.calcular_velocidade()) + carro.acelerar() + print(carro.calcular_velocidade()) + carro.frear + print(carro.calcular_velocidade()) + print(carro.calcular_direcao()) + carro.girar_a_direita() + print(carro.calcular_direcao()) + carro.girar_a_esquerda() + print(carro.calcular_direcao()) + carro.girar_a_esquerda() + print(carro.calcular_direcao()) 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..a51165bfa --- /dev/null +++ b/oo/pessoa.py @@ -0,0 +1,27 @@ +class Pessoa: + olhos = 2 + + def __init__(self, *filhos, nome=None, idade=None): + self.nome = nome + self.idade = idade + self.filhos = list(filhos) + + def cumprimentar(self): + return 'Olá' + + @staticmethod + def metodo_estático(): + return 42 + + @classmethod + def nome_e_atributos_de_classe(cls): + return f'{cls} - olhos {cls.olhos}' + + + +if __name__ == '__main__': + person = Pessoa('Feijão', 5) + print(person.cumprimentar()) + print(person.nome) + print(person.__dict__) + print(person.nome_e_atributos_de_classe()) diff --git a/venv3/lib64 b/venv3/lib64 new file mode 120000 index 000000000..7951405f8 --- /dev/null +++ b/venv3/lib64 @@ -0,0 +1 @@ +lib \ No newline at end of file diff --git a/venv3/pyvenv.cfg b/venv3/pyvenv.cfg new file mode 100644 index 000000000..1507faf0c --- /dev/null +++ b/venv3/pyvenv.cfg @@ -0,0 +1,3 @@ +home = /home/bapds/.pyenv/versions/3.8.2/bin +include-system-site-packages = false +version = 3.8.2 From c3d3669ee79eedd633c029844384faa3cd729aa4 Mon Sep 17 00:00:00 2001 From: bapds Date: Tue, 12 May 2020 23:09:39 -0300 Subject: [PATCH 4/4] =?UTF-8?q?Fim=20da=20implementa=C3=A7=C3=A3o=20do=20P?= =?UTF-8?q?ython=20Birds?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "Exerc\303\255cios/teste_oo_carro.py" | 60 +++++++-------------------- atores.py | 53 ++++++++++++++++++----- fase.py | 36 +++++++++++++--- oo/pessoa.py | 2 +- 4 files changed, 89 insertions(+), 62 deletions(-) diff --git "a/Exerc\303\255cios/teste_oo_carro.py" "b/Exerc\303\255cios/teste_oo_carro.py" index d0411e9e1..29286aa4f 100644 --- "a/Exerc\303\255cios/teste_oo_carro.py" +++ "b/Exerc\303\255cios/teste_oo_carro.py" @@ -1,47 +1,15 @@ -if __name__ == '__main__': - motor = Motor() - print(motor.velocidade) - motor.acelerar() - print(motor.velocidade) - motor.acelerar() - print(motor.velocidade) - motor.acelerar() - print(motor.velocidade) - motor.frear - print(motor.velocidade) - motor.frear - print(motor.velocidade) - direcao = Direcao() - print(direcao.valor) +from unittest import TestCase +from Exercícios.oo_carro import Motor, Direcao, Carro + + +class CarroTestCase(TestCase): + def teste_velocidade_inicial(self): + motor = Motor() + self.assertEqual(0, motor.velocidade) + + def teste_acelerar(self): + motor = Motor() + motor.acelerar() + self.assertEqual(1, motor.velocidade) + - direcao.girar_a_direita() - print(direcao.valor) - direcao.girar_a_direita() - print(direcao.valor) - direcao.girar_a_direita() - print(direcao.valor) - direcao.girar_a_direita() - print(direcao.valor) - direcao.girar_a_esquerda() - print(direcao.valor) - direcao.girar_a_esquerda() - print(direcao.valor) - direcao.girar_a_esquerda() - print(direcao.valor) - direcao.girar_a_esquerda() - print(direcao.valor) - carro = Carro(direcao, motor) - carro.calcular_velocidade() - carro.acelerar() - print(carro.calcular_velocidade()) - carro.acelerar() - print(carro.calcular_velocidade()) - carro.frear - print(carro.calcular_velocidade()) - print(carro.calcular_direcao()) - carro.girar_a_direita() - print(carro.calcular_direcao()) - carro.girar_a_esquerda() - print(carro.calcular_direcao()) - carro.girar_a_esquerda() - print(carro.calcular_direcao()) diff --git a/atores.py b/atores.py index cfc2ef5ea..0c5d1cd4f 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): """ @@ -52,16 +52,21 @@ 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 class Obstaculo(Ator): - pass + _caracter_ativo = 'O' class Porco(Ator): - pass + _caracter_ativo = '@' + _caracter_destruido = '+' class DuploLancamentoExcecao(Exception): @@ -93,7 +98,13 @@ def foi_lancado(self): :return: booleano """ - return True + return not self._tempo_de_lancamento is None + """ + if not self._tempo_de_lancamento is None: + return False + else: + return True + """ def colidir_com_chao(self): """ @@ -101,7 +112,8 @@ def colidir_com_chao(self): o status dos Passaro deve ser alterado para destruido, bem como o seu caracter """ - pass + if self.y <= 0: + self.status = DESTRUIDO def calcular_posicao(self, tempo): """ @@ -117,8 +129,22 @@ 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._esta_voando(): + delta_t = tempo - self._tempo_de_lancamento + self._calcular_posicao_vertical(delta_t) + self._calcular_posicao_horizontal(delta_t) + return super().calcular_posicao(tempo) + def _calcular_posicao_vertical(self, delta_t): + y_atual = self._y_inicial + y_atual += self.velocidade_escalar * delta_t * math.sin(self._angulo_de_lancamento) + y_atual -= (GRAVIDADE * (delta_t ** 2))/2 + self.y = y_atual + + def _calcular_posicao_horizontal(self, delta_t): + x_atual = self._x_inicial + x_atual += + self.velocidade_escalar * math.cos(self._angulo_de_lancamento) * delta_t + self.x = x_atual def lancar(self, angulo, tempo_de_lancamento): """ @@ -129,12 +155,19 @@ def lancar(self, angulo, tempo_de_lancamento): :param tempo_de_lancamento: :return: """ - pass + self._angulo_de_lancamento = math.radians(angulo) + self._tempo_de_lancamento = tempo_de_lancamento + def _esta_voando(self): + return self.foi_lancado() and self.status == ATIVO class PassaroAmarelo(Passaro): - pass + _caracter_ativo = 'A' + _caracter_destruido = 'a' + velocidade_escalar = 30 class PassaroVermelho(Passaro): - pass \ No newline at end of file + _caracter_ativo = 'V' + _caracter_destruido = 'v' + velocidade_escalar = 20 diff --git a/fase.py b/fase.py index 3385175c6..47625ef31 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): """ @@ -73,7 +73,12 @@ 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): """ @@ -86,7 +91,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): @@ -98,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 @@ -105,3 +118,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 passaros in self._passaros: + if passaros.status == ATIVO: + return True + return False + + diff --git a/oo/pessoa.py b/oo/pessoa.py index a51165bfa..582546d64 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -7,7 +7,7 @@ def __init__(self, *filhos, nome=None, idade=None): self.filhos = list(filhos) def cumprimentar(self): - return 'Olá' + return f'Olá, meu nome é {self.nome}' @staticmethod def metodo_estático():