1
resposta

[Dúvida] trey e except em teste de notas para minha faculdade

import os
def texto_das_varaiaveis(nome_da_prova):
    return float(input(f'Digite a sua nota da {nome_da_prova}: '))
#define o texto das variáveis, para que o usuário saiba o que deve digitar

def nome_do_programa():
    print('\nSeja bem-vindo ao sistema de calculo de notas do FBuni!\n')

def resultado_final():
    media = ((v1 + atividade_avaliativa1) + (v2 + atividade_avaliativa2) + v3) / 3
    if media >= 5 and v3 >= 4:
        print('Parabéns, você passou!')
    else:
        print('Infelizmente, você não passou.')
#projeto para calcular a média das notas do FBuni, onde o aluno precisa ter uma média maior ou igual a 5 e uma nota da V3 maior ou igual a 4 para passar. O programa solicita as notas das provas e atividades avaliativas, calcula a média e exibe o resultado final.
try:
    nome_do_programa()
    v1 = texto_das_varaiaveis('V1')
    atividade_avaliativa1 = texto_das_varaiaveis('Atividade Avaliativa 1')
    v2 = texto_das_varaiaveis('V2')
    atividade_avaliativa2 = texto_das_varaiaveis('Atividade Avaliativa 2')
    v3 = texto_das_varaiaveis('V3')
except:
    print('Digite apenas números.')

def main():
    os.system('cls')
    resultado_final()

if __name__ == '__main__':
    main()

No código só aceita números, quanto tento colocar algum tipo de frase dá erro. Não sei onde posso colocar um try e except para tentar pular esse erro e aparecer algo dizendo que só pode números.

1 resposta

Olá, Pedro, como vai?

No seu código o try/except já está envolvendo a parte onde as notas são digitadas, porém a exceção é tratada apenas com a mensagem e o programa segue o fluxo normalmente. Quando ocorre erro de conversão para float, as variáveis deixam de ser atribuídas, e na hora de calcular a média em resultado_final() surge uma nova falha, pois elas não existem ou não têm valor válido.

Um ponto importante é que o erro acontece exatamente dentro da função texto_das_varaiaveis, na conversão do input para float. Portanto, o tratamento pode ser feito ali mesmo, garantindo que só saia da função quando um número válido for digitado.

Um exemplo de ajuste seria colocar o try/except dentro de um laço de repetição, forçando nova digitação até que o valor seja numérico:

def texto_das_varaiaveis(nome_da_prova):
    while True:
        try:
            valor = float(input(f'Digite a sua nota da {nome_da_prova}: '))
            return valor
        except ValueError:
            print('Digite apenas números.')

Dessa forma, se alguém digitar “sete” ou qualquer texto, o programa não quebra nem avança com valor inválido. Ele mostra a mensagem e pede novamente a nota.

Com isso, o bloco try/except que está no corpo principal deixa de ser necessário, pois cada entrada já está protegida individualmente.

Espero ter ajudado.

Siga firme nos seus estudos e conte com o fórum sempre que precisar.

Abraços :)

Caso este post tenha lhe ajudado, por favor, marcar como solucionado