Ir ao conteúdo
  • Cadastre-se
Viking1

Python Exercício de adivinhar número

Recommended Posts

class SoSimOuNao(Exception):
    def __str__(self):
        return 'Você só pode digitar sim ou não, nada mais'


class Jogo(object):
    def __init__(self):
        self.__cartoes = ('''
        1   3   5   7   9   11  13  15
        17  19  21  23  25  27  29  31
        33  35  37  39  41  43  45  47
        49  51  53  55  57  59  61  63
        ''', '''
        2   3   6   7   10  11  14  15
        18  19  22  23  26  27  30  31
        34  35  38  39  42  43  46  47
        50  51  54  55  58  59  62  63
        ''', '''
        4   5   6   7   12  13  14  15
        20  21  22  23  28  29  30  31
        36  37  38  39  44  45  46  47
        52  53  54  55  60  61  62  63
        ''', '''
        8   9   10  11  12  13  14  15
        24  25  26  27  28  29  30  31
        40  41  42  43  44  45  46  47
        56  57  58  59  60  61  62  63
        ''', '''
        16  17  18  19  20  21  22  23
        24  25  26  27  28  29  30  31
        48  49  50  51  52  53  54  55
        56  57  58  59  60  61  62  63
        ''', '''
        32  33  34  35  36  37  38  39
        40  41  42  43  44  45  46  47
        48  49  50  51  52  53  54  55
        56  57  58  59  60  61  62  63
        ''')
        self.__card = 0
        self.__num = 0
        self.main()

    def apresentação(self):
        """
        Método que imprime uma apresentação e explicação rápida de como
        funciona o jogo.
        """
        print('Ola bem-vindo ao jogo de advinhar números')
        print('Para jogar você deve pensar em um número entre 1 e 63')
        print('Depois vou lhe mostrar diversos cartões e você deve me dizer')
        print('se o número que você pensou está dentro desses cartões')
        print('E por fim, vou adivinhar o número que você pensou')

    def recebeEntradaDoUsuário(self):
        """
        Função que recebe a entrada lida com ela de forma adequada
        Devolve True se o usuário digitou sim e False se digitou não
        """
        while True:
            try:
                resp = input('\nO número está nessa cartela? (s/sim ou n/não)\n').lower()

                if not resp.isalpha():
                    print('Digite apenas letras!!')
                elif resp.startswith('s'):
                    return True
                elif resp.startswith('n'):
                    return False
                else:
                    raise SoSimOuNao

            except SoSimOuNao:
                print(SoSimOuNao())

    def imprimeNumeroSecreto(self):
        """
        Imprime uma mensagem apresentando self.__num
        """
        print('\nDeixa eu adivinhar!')
        print('Você pensou no número', self.__num)
        print('Foi não foi?!!')
        print('HAHAHAHA, eu sou um gênio!')

    def main(self):
        """
        Método principal do jogo, nele se organiza tudo
        """
        self.apresentação()

        for i in range(len(self.__cartoes)):
            self.__card = i
            self.mostraCartão()
            self.adicionaNumero(self.recebeEntradaDoUsuário())

        self.imprimeNumeroSecreto()

    def mostraCartão(self):
        """
        Escolhe um cartão e o mostra para o usuário
        """
        print(self.__cartoes[self.__card])

    def adicionaNumero(self, esta):
        """
        Adiciona valor ao número secreto
        """
        if esta:
            self.__num += int(self.__cartoes[self.__card].split()[0])


if __name__ == '__main__':
    x = Jogo()

Minha dúvida é sobre o último método adicionaNumero, sei para que serve, mas não to conseguindo enxergar bem o seu funcionamento.

Se puderem me explicar ficarei muito grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Viking1 Olá. Creio que sua dúvida está aqui nesse if:

if esta:

Se é isso, entenda que fazer dessa forma equivale a fazer isso:

if esta == True:

E quando esse método adicionaNumero é chamado, é passado um valor booleano como argumento para ele: False ou True

O método recebeEntradaDoUsuário retorna False ou True, logo, se ele retornar True, equivale a chamar o método adicionaNumero dessa forma:  

adicionaNumero(True)

Ou mesmo algo assim:

self.adicionaNumero(self.recebeEntradaDoUsuário() == True)

Entendo que a explicação que dei parece que não ficou muito clara, mas creio que dá para entender o que quis passar 😊

 

Se é essa a dúvida ok, caso inda não ficou claro é só perguntar

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×