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

Opinião sobre código

Boa Noite, Tudo bem! Venho estudando Python em outras plataformas, nesse último mês que passou tive a oportunidade de ter acesso a plataforma Alura. Gostaria de uma opinião sobre meu código. Gostaria de saber se teria formas de deixar ele mais "enxuto" e cobrir problemas que "usuários comuns" teriam, no caso entradas que deveriam ser INT que o usuário coloque informação STR etc... desde já agradeço a compreensão.

from random import randrange
from time import sleep

while True:
    print('{:-^50}'.format('Joguinho de adivinhação'))

    maqui = randrange(1, 11)

    cTentativa = 0
    # print(maqui)
    while True:
        jogador = int(input('Digite um número entre 1 e 10: '))
        cTentativa += 1

        if jogador > maqui:
            print('Resposta errada!!')
            print('Tente um número menor...')

        elif jogador < maqui:
            print('Resposta Errada!!')
            print('Tente um número maior...')

        elif jogador == maqui:
            print('Você acertou!!!')
            sleep(1)
            break

    print(f'Número de tentativas {cTentativa}')
    veri = str(input('Quer jogar novamente? [S/N]')).strip().lower()
    if veri == 'n':
        break

    while True:
        if(veri != 's' and veri != 'n'):
            print('Erro Resposta não aceita!\nTente novamente....')
            veri = str(input('Quer jogar novamente? [S/N]')).strip().lower()

        if (veri == 's' or veri == 'n'):
            break
if ( veri == 'n'):
    break

print('Saindo...')
sleep(2)
2 respostas
solução!

Bem vindo à Alura, @Aluno. Espero que goste da plataforma e participe do nosso fórum :)

Não estou fazendo julgamento sobre certo/errado, são apenas alguns comentários sobre o código:

1 - Funções

É uma boa prática deixar seu código dentro de funções. Assim, outro código poderá chamar a sua função quando precisar

def funçãoComNomeClaroELegível():
    # code
    # ...

2 - Funções devem ser curtas

Quando uma função ultrapassa 15 linhas, ela já se torna uma boa candidata para ser dividida em funções menores.

Considere separar a parte de tratamento da entrada do usuário, por exemplo.

3 - Evite aninhamento do código

Código aninhado é mais difícil de ler, de entender e principalmente de dar manutenção no futuro.

Colocar um While True: dentro de outro While True: impede que a instrução break seja usada para escapar o While "de fora". Isso acabou causando o problema 4 a seguir:

4 - DRY - Não se repita

 if veri == 'n':
        break

Este código foi escrito duas vezes. Isso indica que a lógica do código precisa ser revista.

Uma possível alteração seria alterar o seguinte código:

if veri == 'n':
        break

while True:
        if(veri != 's' and veri != 'n'):
            print('Erro Resposta não aceita!\nTente novamente....')
            veri = str(input('Quer jogar novamente? [S/N]')).strip().lower()

        if (veri == 's' or veri == 'n'):
            break

para

while veri != 's' and veri != 'n':
      print('Erro Resposta não aceita!\nTente novamente....')
      veri = str(input('Quer jogar novamente? [S/N]')).strip().lower()

Muito obrigado pelo feedback!