1
resposta

limitando a entrada

Boa tarde. Ainda no jogo da advinhação, ao digitar um caracter, que não seja numérico, dá erro. Como limitar a entrada para que a pessoa digite apenas números, e o jogo continue? Por exemplo, tentei algo do tipo if (chute # string): print ("digite um valor numérico entre 1 e 100")

1 resposta

Olá Eduardo, tudo bem com você?

Podemos testar a entrada do usuário salva na variável chute_str utilizando a cláusula if com o operador .isnumeric(), esse operador irá testar se os dados contidos na string são numéricos, em caso afirmativo ela retorna o valor booleano True. Caso o usuário tenha informado letras ou outros caracteres não numéricos, será retornado False. O uso do operador .isnumeric() ficará da seguinte forma.

chute_str.isnumeric()

Onde retornará:

  • True: Quando o usuário informa apenas números.
  • False: Quando o usuário informa outros caracteres.

Sabemos que a estrutura condicional if é executada apena quando a expressão declarada é verdadeira (True), mas, como apresentado acima, queremos que ela seja executada quando o usuário informa outros caracteres, ou seja, quando o retorno da expressão chute_str.isnumeric() é False.

Para que nossa lógica funcione vamos fazer o uso da cláusula not, essa cláusula tem a função de negar o que foi declarado após ela invertendo o seu valor booleano, o que é False vira True e o que é True vira False. Assim, quando um usuário fornecer um caracteres não numéricos o resultado do operador .isnumeric() retornará o valor False i e a cláusula not negará o resultado transformando para True. Implementando no código temos.

if (not chute_str.isnumeric()):

Agora basta declararmos a estrutura do código presente no laço if e usarmos a cláusula continue para que o laço for passe para uma nova tentativa. Como abaixo.

if not chute_str.isnumeric():
    print('Informe apenas números!')
    continue

Caso o usuário informe apenas caracteres numéricos, a estrutura condicional if não será executada, passando para a conversão da entrada para o tipo int e demais validações.

Caso queria testar o código, basta copiar a validação if acima e adiciona-la antes da conversação para o tipo int e dentro do laço for, verifique também o nome da variável chute_str, caso seja necessário, substituta deixando conforme seu projeto. Salve o arquivo apos a mudança e execute-o.

Aplicando a validação no código da aula temos o seguinte resultado.

print("*********************************")
print("Bem vindo ao jogo de Adivinhação!")
print("*********************************")

numero_secreto = 42
total_de_tentativas = 3

for rodada in range(1, total_de_tentativas + 1):
    print("Tentativa {} de {}".format(rodada, total_de_tentativas))
    chute_str = input("Digite um número entre 1 e 100: ")
    print("Você digitou " , chute_str)

    if (not chute_str.isnumeric()):
        print('Informe apenas números!')
        continue

    chute = int(chute_str)

    if(chute < 1 or chute > 100):
        print("Você deve digitar um número entre 1 e 100!")
        continue

    acertou = chute == numero_secreto
    maior   = chute > numero_secreto
    menor   = chute < numero_secreto

    if(acertou):
        print("Você acertou!")
        break
    else:
        if(maior):
            print("Você errou! O seu chute foi maior do que o número secreto.")
        elif(menor):
            print("Você errou! O seu chute foi menor do que o número secreto.")

print("Fim do jogo")

Lembre-se que pode contar com o fórum sempre, seja para tirar suas dúvidas, compartilhar dicas ou o seu desenvolvimento junto a Alura.

Espero ter lhe ajudado, fico à disposição em caso de dúvidas.

Abraços e bons estudos.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!