Fala galera, estou tentando colocar todo o programa dentro de funções mas está dando erro: Da mesma forma se eu coloco o qtd dentro de uma def e chamo essa def dentro do "programa_princ()" dá erro. Não tem como chamar uma uma função dentro da outra?
Fala galera, estou tentando colocar todo o programa dentro de funções mas está dando erro: Da mesma forma se eu coloco o qtd dentro de uma def e chamo essa def dentro do "programa_princ()" dá erro. Não tem como chamar uma uma função dentro da outra?
Oi, Fabio! Tudo bem?
O erro ocorre devido à chamada recursiva da função main()
dentro do bloco except
da função programa_princ()
, que acaba causando um loop infinito de chamadas entre main()
e programa_princ()
sempre que uma exceção é capturada, até que a profundidade máxima de recursão do Python seja excedida e um erro seja lançado.
Além disso, há um problema de escopo com a variável qtd
, que é definida fora das funções e depois usada dentro da função programa_princ()
, mas sem ser passada como argumento. Isso pode causar um erro de NameError
se tentarmos chamar programa_princ()
de um contexto onde qtd
não está definida.
Devido a isso, podemos resolver esses problemas da seguinte forma:
main()
dentro do bloco except
, em vez disso, podemos usar um loop while na função main()
para repetir a solicitação de dados até que sejam válidos.qtd
como um argumento para a função programa_princ()
para garantir que ela tenha acesso a essa variável.Podemos, então, reestruturar nosso código da seguinte forma:
def titulo():
print('Bem vindo!!! Prossiga para calculo de média ')
def programa_princ(qtd):
media_list = []
try:
for c in range(qtd):
num = int(input('Informe um número: '))
media_list.append(num)
soma = sum(media_list)
media = soma / len(media_list)
print(f'A média dos números escolhidos é: {media}')
except ValueError:
print('Ops! Valor inválido!!!')
def main():
titulo()
qtd = int(input('Informe a quantidade de números deseja inserir: '))
programa_princ(qtd)
if __name__ == "__main__":
main()
Note que agora qtd
é passada como parâmetro para programa_princ(qtd)
. Além disso, removi a chamada recursiva para main()
no bloco except
e substituí por uma mensagem de erro. Isso vai evitar o loop infinito e a exceção de máxima profundidade de recursão.
Espero ter ajudado! Caso tenha ficado alguma dúvida, sinta-se à vontade em comunicar, estou à disposição!
Um forte abraço e bons estudos!