Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Onde eu posso melhorar?

Resolvi brincar um pouco com os conceitos de dificuldade e acabei fazendo isso:

import random

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

total_de_tentativas = 3
final = ""

print("Qual é o nivel de dificuldade?")
print("(1) Fácil (2) Médio (3)Difícil")
nivel = int(input("Defina a dificuldade: "))

while nivel > 3 or nivel < 0:
    print("Dificuldade inválida")
    nivel = int(input("Defina a dificuldade: "))

    if 0 < nivel < 4:
        break

if nivel == 1:
    numero_secreto = random.randrange(1, 11)
    final = "10"

else:
    if nivel == 2:
        numero_secreto = random.randrange(1, 51)
        final = "50"
    elif nivel == 3:
        numero_secreto = random.randrange(1, 101)
        final = "100"

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 {}: ".format(final))
    print("Você digitou ", chute_str)
    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", "o número secreto era ", numero_secreto)

Tem algo que eu possa melhorar?

1 resposta
solução!

Olá,

algumas sugestões que pode avaliar:

while nivel not in (1, 2, 3):
    print("Dificuldade inválida")
    nivel = int(input("Defina a dificuldade: "))

Por padrão, o Python entra no while caso o nro digitado nao esteja dentro da lista (1,2,3).

if nivel == 1:
    final = 10
elif nivel == 2:
    final = 50
else:
    final = 100

numero_secreto = random.randrange(1, final + 1)

Utilizar if/elif para determinar o intervalo de nros. Não precisa converter a variável final para texto e ainda utilizá-la para definir o intervalor final, somando + 1. Além de gerar o nro secreto somente depois de escolher o nível.

chute = int(input(f"Digite um número entre 1 e {final}: "))
print(f"Você digitou {chute}") 

Utilizar f-string no lugar do .format. Isso evita as conversões para int.

if chute not in range(1, final + 1):
    print(f"Você deve digitar um número entre 1 e {final}!")
    continue

Além de corrigir a mensagem que exibia sempre entre 1 e 100, agora com f-string, o if está comparando o intervalo do chute de forma mais eficiente.

Só algumas sugestões, tentei não alterar muito do original que já estava legal, além de não utilizar outros recursos mais avançados.

[]'s