Oi, Pedro, tudo certo?
O seu código está bem organizado e realiza o cálculo da gorjeta e do valor total corretamente. Uma única atenção importante está no tratamento da exceção. Você está capturando apenas a exceção do tipo NameError, que ocorre quando uma variável não é reconhecida. No contexto da entrada de dados do usuário, o erro mais comum provavelmente será um ValueError, caso o usuário insira um valor que não pode ser convertido para float. Então, seria interessante ampliar o except para capturar ValueError também, garantindo que o programa lide melhor com entradas inváidas. Além disso, a utilização da recursão para repetir a função em caso de erro funciona, mas pode ser substituída por um loop para evitar possíveis problemas em execuções muito longas.
Você já pensou em como poderia tornar sua função mais flexível para diferentes formatos de entrada, como aceitar valores separados por vírgulas ou símbolos de moeda? Como isso impactaria a experiência do usuário e o tratamento dos dados?
Parabéns pelo esforço, Pedro. O fórum está à disposição para ajudar sempre que precisar.
Para saber mais:
Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!