Python Advocation game

1

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

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!')
    
asked by anonymous 17.05.2018 / 03:54

1 answer

0

There are 2 problems with the code.

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

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 the SetStatus() function, where you update the estado2 variable.

This variable is declared in the global scope and, if you do not state this for Python, it considers that the variable inside the function is "other", declared locally and different from global, which prevents the game state from being updated .

The solution is to indicate that it 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:
    ...
    
17.05.2018 / 04:31