Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Quando chute < 0 ou chute >1000 não quero perder chances! Não consegui usando in range, somente while

Com in range não consegui fazer com que quando o usuário digitasse um valor fora do intervalo sugerido perdesse uma tentativa. Alguém tem uma saída?

import random

print("**************************")
print("* JOGO DO NÚMERO SECRETO *")
print("**************************")

numero_secreto = random.randrange(1, 1001)
print(numero_secreto)

print("Escolha a dificuldade")
nivel = int(input("(1) FÁCIL\n(2) MÉDIO\n(3) DIFÍCIL\n: "))

if nivel == 1:
    chances = 20
if nivel == 2:
    chances = 13
else:
    chances = 9

for tentativas in range(0, chances):

    if tentativas == chances - 1:
        print("ÚLTIMA CHANCE!")
    else:
        print("VOCê TEM {} CHANCES".format(chances - tentativas))

    chute = int(input("Digite um número entre 1 e 1000\n: "))

    if chute < 1 or chute > 1000:
        print("VOCÊ DEVE ESCOLHER ENTRE 1 E 1000!!!")
        continue

    certo = chute == numero_secreto
    maior = chute > numero_secreto
    menor = chute < numero_secreto

    if certo:
        print("VOCÊ ACERTOU!")
        break
    elif menor:
        print("É MAIOR!")
    elif maior:
        print("É MENOR!")

    if tentativas == chances - 1:
        print("ACABARAM AS SUAS CHANCES!")
        print("O NÚMERO SECRETO É {}".format(numero_secreto))

print("FIM DE JOGO")

Eu refiz utilizando o while e além de ter sido mais fácil - para mim - o raciocínio na construção do código, eu também consegui fazer com que não descontasse a tentativa caso colocasse um número fora do intervalo. Entendo que pela didática do curso in range seja muito interessante. Mas i ai, alguém sugere algo?

6 respostas

Seria isso?

if chute not in range(1, 1001):
    print("VOCÊ DEVE ESCOLHER ENTRE 1 E 1000!!!")
    continue

Boa tarde Robson.

É uma opção muito bacana para substituir o "if chute < 0 or chute >1000". Já me agregou algo. Porém, a problemática de descontar chances ainda permanece.

Porque quando ele da o "continue", ele passara para o próximo valor do "in range" na linha "for tentativas in range(0, chances):" a ideia é que ele repetisse o mesmo valor de tentativa ou que fosse possivel aumentar o numero de chances exatamente nesta linha.

Pelo que tenho visto, depois que definido o "for .... in range", o range não é possível ser alterado, nem suprimido, nem alargado. Mas procuro saber se isso realmente é verdade.

solução!

Então, se não entendi errado, o que você quer é não descontar uma tentativa caso o usuário informe um valor fora do intervalo permitido, isso?

Você pode usar o while pra testar se o chute é válido:

while chute not in range(1, 1001):
    print("VOCÊ DEVE ESCOLHER ENTRE 1 E 1000!!!")
    chute = int(input("Digite um número entre 1 e 1000\n: "))

Assim o usuário fica 'preso' nesse loop e só sai quando digitar um número válido.

Isso!!!

Exatamente. Obrigado amigo.

Robson!

Uma coisa importante que esqueci de comentar é que é importante definir antes a variável "chute" como 0 ou algum valor fora de 1 a 1000.

Porque só substituir essa ideia ele da erro por não ter definido antes a variável chute, e se colocar "chute" como 1 ou outro número até 1000, ele pula o loop.

Na verdade o que eu tinha testado era fazendo a pergunta 2 vezes msm, mais ou menos assim:

chute = int(input("Digite um número entre 1 e 1000\n: "))

while chute not in range(1, 1001):
    print("VOCÊ DEVE ESCOLHER ENTRE 1 E 1000!!!")
    chute = int(input("Digite um número entre 1 e 1000\n: "))