3
respostas

Boas práticas

Eu queria treinar um pouco o uso de arrays e resolvi fazer os níveis de jogo de forma que pudessem ser facilmente alterados. Ficou como eu gostaria, mas queria pedir a opinião do pessoal sobre a legibilidade e eficiência do código para esse trecho.

dificuldade_numero = [10,100,1000,1000]
dificuldade_tentativas = [2,3,5,4]
dificuldade = 0
print("Níveis de dificuldade:")
for dificuldade in range(0, len(dificuldade_numero)):
    print(f"{dificuldade + 1} = {dificuldade_tentativas[dificuldade]} tentativas e número secreto entre 1 e {dificuldade_numero[dificuldade]}")

print("Escolha o nível de dificuldade: ")
dificuldade = int(input()) - 1
while(dificuldade < 0 or dificuldade >= len(dificuldade_numero)):
    print(f"Nível inválido. Escolha entre 1 e {len(dificuldade_numero)}")
    dificuldade = int(input()) - 1

numero_max = dificuldade_numero[dificuldade]
total_de_tentativas = dificuldade_tentativas[dificuldade]
numero_secreto = random.randrange(1,numero_max + 1)

O código completo é:

import random

print("||||||||||||||||||||||||||||||||||||||||")
print("|| Bem vindos ao jogo de adivinhação! ||")
print("||||||||||||||||||||||||||||||||||||||||")

dificuldade_numero = [10,100,1000,1000]
dificuldade_tentativas = [2,3,5,4]
dificuldade = 0
print("Níveis de dificuldade:")
for dificuldade in range(0, len(dificuldade_numero)):
    print(f"{dificuldade + 1} = {dificuldade_tentativas[dificuldade]} tentativas e número secreto entre 1 e {dificuldade_numero[dificuldade]}")

print("Escolha o nível de dificuldade: ")
dificuldade = int(input()) - 1
while(dificuldade < 0 or dificuldade >= len(dificuldade_numero)):
    print(f"Nível inválido. Escolha entre 1 e {len(dificuldade_numero)}")
    dificuldade = int(input()) - 1

numero_max = dificuldade_numero[dificuldade]
total_de_tentativas = dificuldade_tentativas[dificuldade]
numero_secreto = random.randrange(1,numero_max + 1)
rodada = 1

for rodada in range(1, total_de_tentativas + 1):
    print(f"Tentativa {rodada} de {total_de_tentativas}")
    chute_str = input(f"Digite um número de 1 a {numero_max}: ")
    print("Você digitou: ", chute_str)
    chute = int(chute_str)
    while(chute < 1 or chute > numero_max):
        print("Você digitou um número inválido. Tente novamente.")
        chute_str = input(f"Digite um número de 1 a {numero_max}: ")
        print("Você digitou: ", chute_str)
        chute = int(chute_str)

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

    if(acertou):
        print("|||||||||||||||||||||||||||||")
        print("|| Parabéns! Você acertou! ||")
        print("|||||||||||||||||||||||||||||")
        break
    elif(rodada == total_de_tentativas):
        print("Que pena, você perdeu.")
        print("O número secreto era", numero_secreto)
    else:
        print("Você errou")
        if(maior):
            print("Seu chute foi MAIOR do que o número secreto.")
        elif(menor):
            print("Seu chute foi MENOR do que o número secreto.")

print("Fim do jogo")
3 respostas

Minha sugestão seria agrupar a origem dos dados apresentados em uma 'fonte' só de informação, pensando que na frente você vai buscar isso de uma coleção, como uma tabela ou um arquivo TXT:

dificuldades = (
    {'nivel': 1, 'maximo': 10, 'tentativas': 2},
    {'nivel': 2, 'maximo': 100, 'tentativas': 5},
    {'nivel': 3, 'maximo': 1000, 'tentativas': 7},
)

print("Níveis de dificuldade:")
for dificuldade in dificuldades:
    print(f"{dificuldade['nivel']} = {dificuldade['tentativas']} tentativas "
          f"e número secreto entre 1 e {dificuldade['maximo']}")

print("Escolha o nível de dificuldade: ")
dificuldade_selecionada = int(input())
while dificuldade_selecionada < 1 or dificuldade_selecionada >= len(dificuldades):
    print(f"Nível inválido. Escolha entre 1 e {len(dificuldades)}")
    dificuldade_selecionada = int(input())

numero_max = dificuldades[dificuldade_selecionada-1]['maximo']
total_de_tentativas = dificuldades[dificuldade_selecionada-1]['tentativas']

A alteração disso para uma lista de objetos Dificuldades() depois (você vai ver isso mais pra frente no curso) seria mínima.

De fato, não conheço ainda essa sintaxe, mas creio que entendi a lógica dela. Parece bem interessante de fato como fica a visualização. Mais confortável para modificações futuras.

Excelente visão do programa, parabéns.