Python - Jogo Jokenpo

· GuioSoft Blog

#import #def #from #input #random #while

Início

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?')