PythonAula 1228/08/20261h35
Funções e batalha final do RPG
Retoma o RPG com match-case, guard, case _ e random.randint() para o D20, com validação de input() por .isdigit() e int(). Destrava função com def, parâmetro, return, None e escopo para quebrar código grande e reorganizar o jogo em atos, fechando com while, and e break na batalha por turnos. Leitura do TP2 na terça, TP2 vai para dia 4 e TP3 para dia 9.
O que foi falado
Relembrar RPG com
00:11:49match-casee D20O jogo joga um D20 de 1 a 20 com
random.randint()e decide commatchna resposta.casecomifsó entra se a igualdade bater e o dado passar do limite, tipo esquiva comdado >= 10e aura comdado >= 15.|faz OU dentro docaseecase _pega o resto comoelse, valendo só o primeirocaseque bate de cima para baixo.dado = 17 resposta = 0 match resposta: case 0 | 1 if dado >= 10: print("esquivou") case _: print("atingido")Saída
esquivou
Declarar função com
00:22:28defe invocar com()Função é um bloco combinado que serve para quebrar código grande e ilegível em partes. Declarar com
defsozinho não executa nada, só combina com Python que aquele nome existe. Só roda quando invoca com nome mais(e), por isso jogo dentro derodaJogonada faz sem a chamada.def soma(a, b): return a + b print(soma(2, 3))Saída
5
Criar
00:28:05input_digitocom parâmetro ereturnA função recebe
enunciado, mostra cominput(), testa com.isdigit()e converte comint()se válido. Se válido devolve o número comreturn, se inválido devolveNonepeloelse. Quem chama precisa guardar em variável com=ou mandarprint()direto sem guardar.def input_digito(texto): if texto.isdigit(): return int(texto) return None print(input_digito("20")) print(input_digito("oi"))Saída
20 None
Entender escopo e
00:41:22()obrigatórioVariável criada dentro da função como
respostasó existe lá dentro e morre ao terminar, então não conflita com mesmo nome fora. Função pode não receber nada e não retornar nada, mas precisa manter(e)ao declarar e ao invocar. Python lê de cima para baixo, mas declarar não executa, entãoprimeiroAtopode chamarsegundoAtodeclarado depois porque só roda na chamada final.resposta = "fora" def teste(): resposta = "dentro" return resposta print(teste()) print(resposta)Saída
dentro fora
Reorganizar jogo em
00:50:14rodaJogoe atosO código foi quebrado em
rodaJogo,mostraEpilogo,primeiroAto,segundoAtoeterceiroAtopara ler por partes. Cada ato cuida de uma decisão, e o terceiro testa aura ou esquiva no D20 commatch-casee guard. Para testar só um trecho, comenta a chamada derodaJogoe chama só o ato.def primeiro_ato(): return "comecou" def roda_jogo(): print(primeiro_ato()) roda_jogo()Saída
comecou
Fazer batalha com
01:12:48while, HP ebreakO quarto ato repete o turno com
whileenquantohp_heroina > 0 and hp_demonio > 0. Cada volta mostra HP comf-string, oferece curar, atacar ou aura e aplica dano do demônio. Se o demônio morre no ataque, umifcombreakescapa dowhilepara não dar turno para morto.hp_heroina = 20 hp_demonio = 10 while hp_heroina > 0 and hp_demonio > 0: hp_demonio = hp_demonio - 7 if hp_demonio <= 0: break print(hp_demonio)Saída
-4
Perguntas que valem a pena
Pode usar or no match-case para alternativa?00:14:28
Não, no match-case o OU é o |, or só vale em contexto booleano.
Para que serve o else na função de ler dígito?00:40:47
Serve para tratar o caso inválido retornando None, sem return explícito também retornaria None.
Variável dentro da função conflita com mesmo nome fora?00:41:12
Não, é escopo, só existe dentro da função e morre ao terminar.
Pode declarar função sem nada dentro dos parênteses?00:57:27
Sim, mas precisa manter ( e ) ao declarar e ao invocar.
Como a função chama outra declarada depois se Python lê de cima para baixo?00:58:25
Declarar é só combinado, primeiroAto só executa na chamada final, quando segundoAto já existe.
Precisa testar se o demônio está vivo antes do turno dele?01:28:14
Sim, foi adicionado if com break para escapar do while.
Conceitos da aula
- match-case
- guard
- case _
- função
- def
- parâmetro / argumento
- return / retornar
- None
- escopo
- while
- break
- f-strings
Reforce este assunto
- Primeiras funções: `def`, parâmetros, retorno e docstringsPython · trilha, etapa 9
- Laços `for` e `while` com `range`, `break` e `continue`Python · trilha, etapa 7