Python Guessing game

Asked

Viewed 176 times

1

I have the following problem: every attempt of the user, the code does not accuse if it is cold, hot, warm, boiling. That is, does not give the tips to the player. If anyone can help me I appreciate!

print('Você tem 10 chances de acertar o número que eu estou pensando.')
print('Trata-se de um valor entre 1 e 100. Então, vamos lá!')
print()
import random

n = random.randrange(1, 101)
nrepete = []
estado1 = 7  # início
estado2 = 7


def SetStatus(tentativa):
    if abs(n - palpite) == 1:
        estado2 = 6  # fervendo
    if abs(n - palpite) == 2 or abs(n - palpite) == 3:
        estado2 = 5  # muito quente
    if abs(n - palpite) >= 4 and abs(n - palpite) <= 6:
        estado2 = 4  # quente
    if abs(n - palpite) >= 7 and abs(n - palpite) <= 9:
        estado2 = 3  # morno
    if abs(n - palpite) >= 10 and abs(n - palpite) <= 15:
        estado2 = 2  # frio
    if abs(n - palpite) >= 16 and abs(n - palpite) <= 25:
        estado2 = 1  # muito frio
    if abs(n - palpite) >= 26:
        estado2 = 0  # congelando


def FornecerPista():
    if status1 == 7:
        if estado2 == 0:
            print('Está congelando!')
        if estado2 == 1:
            print('Está muito frio!')
        if estado2 == 2:
            print('Está frio!')
        if estado2 == 3:
            print('Está morno!')
        if estado2 == 4:
            print('Está quente!')
        if estado2 == 5:
            print('Está muito quente!')
        if estado2 == 6:
            print('Está fervendo!')
    if estado1 - estado2 == 0:
        if estado2 == 0:
            print('Seu palpite continua congelando!')
        if estado2 == 1:
            print('Seu palpite continua muito frio!')
        if estado2 == 2:
            print('Seu palpite continua frio!')
        if estado2 == 3:
            print('Seu palpite continua morno!')
        if estado2 == 4:
            print('Seu palpite continua quente!')
        if estado2 == 5:
            print('Seu palpite continua muito quente!')
        if estado2 == 6:
            print('Seu palpite continua fervendo!')
    if estado1 - estado2 > 0:
        if estado2 == 0:
            print('Ops, seu palpite deu uma esfriada e agora está congelando!')
        if estado2 == 1:
            print('Ops, seu palpite deu uma esfriada e agora está muito frio!')
        if estado2 == 2:
            print('Ops, seu palpite deu uma esfriada e agora está frio!')
        if estado2 == 3:
            print('Ops, seu palpite deu uma esfriada e agora está morno!')
        if estado2 == 4:
            print('Ops, seu palpite deu uma esfriada e agora está quente!')
        if estado2 == 5:
            print('Ops, seu palpite deu uma esfriada e agora está muito quente!')
    if estado1 - estado2 < 0:
        if estado2 == 1:
            print('Ops, seu palpite deu uma esquentada e agora está muito frio!')
        if estado2 == 2:
            print('Ops, seu palpite deu uma esquentada e agora está frio!')
        if estado2 == 3:
            print('Ops, seu palpite deu uma esquentada e agora está morno!')
        if estado2 == 4:
            print('Ops, seu palpite deu uma esquentada e agora está quente!')
        if estado2 == 5:
            print('Ops, seu palpite deu uma esquentada e agora está muito quente!')
        if estado2 == 6:
            print('Ops, seu palpite deu uma esquentada e agora está fervendo!')


for tentativa in range(1, 11):
    while True:
        try:
            palpite = input('Tentativa' + str(tentativa) + ':')
            palpite = int(palpite)
            nrepete.append(palpite)
            if (palpite < 1) or (palpite > 100):
                raise ValueError
            if nrepete.count(palpite) >= 2:
                raise NameError
            else:
                break
        except NameError:
            print('Esse valor já foi testado! Tente de novo.')
        except ValueError:
            print('Valor inválido! Tente de novo.')

    if palpite == n:
        print('\nParabéns !')
        print('\nVocê acertou o número', n, 'após', tentativa, 'tentativa(s)!')
        break
    if tentativa == 1:
        SetStatus(tentativa)
    if tentativa > 1:
        estado1 = estado2
        SetStatus(tentativa)
    FornecerPista()

    if tentativa == 10 and palpite != n:
        print('\nLamento, mas após', tentativa, 'tentativas')
        print('Você não conseguiu acertar o número', n, 'que eu estava pensando!')

1 answer

0


There are 2 problems with the code.

The first is a syntax error in the function FornecerPista():

def FornecerPista():
    # AQUI: o nome correto da variável é estado1, não status1
    if estado1 == 7: 
        if estado2 == 0:
            print('Está congelando!')
    ...

The second is in function SetStatus(), where you update the variable estado2.

This variable is declared in the global scope and, if you don’t indicate this for Python, it considers that the variable within the function is "other", declared locally and different from the global, which prevents game status update.

The solution is to indicate that this is the global variable estado2:

def SetStatus(tentativa):
    # AQUI: declara estado2 como global
    global estado2

    if abs(n - palpite) == 1:
        estado2 = 6  # fervendo
    if abs(n - palpite) == 2 or abs(n - palpite) == 3:
    ...

Browser other questions tagged

You are not signed in. Login or sign up in order to post.