Arquivo jokenpo.py
1from jokenpo_utils import (avaliar_jogada, gerar_jogada_pc, imprimir_placar,
2 instrucoes, perguntar_jogada_humano, simnao)
3
4
5def main():
6 '''Função principal do programa'''
7 if not simnao('Deseja começar?'):
8 return
9
10 instrucoes()
11 n_jogada = p_pc = p_humano = 0
12
13 while n_jogada < 7:
14 print('\nJogada #', n_jogada+1)
15 n_jogada += 1
16 j_pc = gerar_jogada_pc()
17 j_hu = perguntar_jogada_humano()
18 if not j_hu:
19 break
20 resultado = avaliar_jogada(j_pc, j_hu)
21 if resultado == -1:
22 p_pc += 1
23 elif resultado == 1:
24 p_humano += 1
25
26 imprimir_placar(p_pc, p_humano)
27
28
29if __name__ == '__main__':
30 main()
Arquivo jokenpo_utils.py
1from random import choice
2
3
4OPCOES = {
5 'p': 'Pedra',
6 'a': 'pApel',
7 't': 'Tesoura'
8}
9
10
11def simnao(pergunta):
12 """Faz uma pergunta ao usuário e espera S ou N
13 Retorna True se for S, e False se for N
14 """
15 while True:
16 resposta = input(pergunta).strip().lower()
17 if resposta in 'sn':
18 return resposta == 's'
19 print('ERRO: Informe S ou N!')
20
21
22def instrucoes():
23 print(' JOKENPO '.center(40, '*'),
24 'Regras:',
25 '* Pedra ganha de Tesoura',
26 '* Tesoura ganha de pApel',
27 '* pApel ganha de Pedra',
28 '*'*40,
29 sep='\n')
30
31
32def gerar_jogada_pc():
33 jogada_pc = choice(list(OPCOES.keys()))
34 print('Minha vez. Já escolhi minha opção...')
35 return jogada_pc
36
37
38def perguntar_jogada_humano():
39 while True:
40 jogada_hu = input(
41 f'Informe a sua jogada {list(OPCOES.keys())}:').strip().lower()
42 if jogada_hu in OPCOES:
43 return jogada_hu
44 print(f'ERRO: opções',
45 [f'{k} = {v}' for k, v in OPCOES.items()],
46 sep='\n')
47 if simnao('Deseja sair?'):
48 return None
49
50
51def avaliar_jogada(j_pc, j_hu):
52 """Avalia a jogada retornando
53 0 = Empate
54 -1 = PC ganhou
55 1 = Humano ganhou
56 """
57 if j_pc == j_hu:
58 print('Empatamos com ', OPCOES[j_pc])
59 return 0
60 if ((j_pc == 'p' and j_hu == 't') or
61 (j_pc == 't' and j_hu == 'a') or
62 (j_pc == 'a' and j_hu == 'p')):
63 mensagem = f'Eu ganhei. {OPCOES[j_pc]} ganha de {OPCOES[j_hu]}'
64 r = -1
65 else:
66 mensagem = f'Você ganhou. {OPCOES[j_hu]} ganha de {OPCOES[j_pc]}'
67 r = 1
68 print(mensagem)
69 return r
70
71
72def imprimir_placar(p_pc, p_humano):
73 if p_pc == p_humano:
74 print(f'EMPATAMOS {p_pc} a {p_humano}')
75 elif p_pc > p_humano:
76 print(f'EU GANHEI DE {p_pc} a {p_humano}')
77 else:
78 print(f'VOCÊ GANHOU DE {p_humano} a {p_pc}')
79
80
81if __name__ == '__main__':
82 resposta = simnao('Deseja jogar jokenpo?')