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

[Exercício} Como melhorar?

Salve, fiz o exercício proposto para criar uma lista de números de 1 a 10, uma lista de nomes e outra de anos. Fiquei um tempo batendo cabeça aqui e quando fui ver a solução, vi que era pra ser algo mais simples, rs. A solução proposta era:

lista_de_numeros = [1,2,3,4,5,6,7,8,9,10]
lista_de_nomes = ['emy','gui','lais','mari']
lista_de_anos = [1999,2023]

Minha solução foi:


numeros_ate_9 = []

def main():
    inserir_numero()
  

def inserir_numero():
    numero = int(input('insira um número: '))
    numeros_ate_9.append(numero)
    if numero != 0:
        comecar_de_novo()

def comecar_de_novo():

    inserir_numero()


  
if __name__ == '__main__':
      main()

Como ainda não dominei bem a coisa do laço de lista, defini o "0" como gatilho para interromper a gambiarra que fiz com uma função chamando a outra infinitamente. Assim né... Funcionar, funcionou. Dá até pra ver no modo interativo.

[23:15:26] [~/Área de Trabalho/dev/sabor-express] ❱❱❱ python3  -i ./exercicio_6.py
insira um número: 1
insira um número: 2
insira um número: 3
insira um número: 4
insira um número: 5
insira um número: 6
insira um número: 7
insira um número: 8
insira um número: 9
insira um número: 0
>>> numeros_ate_9
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
>>> 
KeyboardInterrupt
>>> 
KeyboardInterrupt
>>> 

Mas alguém pode me dar umas ideias do que poderia ficar melhor?

Eu usei o pedaço do código

if __name__ == '__main__':
      main()

Pois sem ele não consegui fazer com que a função inserir_numero fosse chamada, mas eu gostaria de saber se há outra forma de invocar funções sem definir o documento como o principal da aplicação utilizando o código acima.

--------> EDIT <---------

Depois de postar vi que podia dar uma enxugada na gambiarra e eliminei 3 linha chamando a função inserir número diretamente na condicional:

if __name__ == '__main__':
      inserir_numero()
2 respostas
solução!

Olá! Parabéns por sua dedicação e esforço em resolver o exercício! Isso mostra que você está realmente aprendendo a pensar como uma pessoa dev :)

Agora, vamos ao seu código. A solução proposta para o exercício é mais simples porque ela cria a lista de números de 1 a 10 diretamente, sem a necessidade de interação do usuário. No seu caso, você criou um programa que permite ao usuário inserir os números um a um, até que ele insira o número 0. Isso é um pouco mais complexo e, embora funcione, não é a solução mais eficiente para esse problema específico.

No entanto, seu código pode ser útil em outras situações, onde a entrada do usuário é necessária. Assim, você pode melhorar seu código removendo a função main() e chamando a função inserir_numero() diretamente, como você mesmo sugeriu em sua edição.

Além disso, você poderia usar um loop while em vez de chamar a função inserir_numero() recursivamente. Isso tornaria o código mais fácil de entender e menos propenso a erros. Aqui está um exemplo de como você poderia fazer isso:

numeros_ate_9 = []

def inserir_numero():
    while True:
        numero = int(input('insira um número: '))
        if numero == 0:
            break
        numeros_ate_9.append(numero)

if __name__ == '__main__':
    inserir_numero()

Quanto à sua pergunta sobre a linha if __name__ == '__main__':, essa é uma prática comum em Python para garantir que o código dentro desse bloco só será executado se o arquivo for executado diretamente, e não quando é importado como um módulo. Isso é útil quando você quer que partes do seu código sejam reutilizáveis em outros programas, mas também quer que ele possa ser executado como um programa independente.

Espero ter ajudado e bons estudos!

Salve, Laís!

Tu é a instrutora que não gosta de lasanha, né? Tamo junto nessa, rs. Eu boto fé que tá uma coisa assim, bem gambiarra, mas fiquei feliz ao descobrir que fui um pouco além do que o exercício pediu e que feio ou não, o trem funcionou :D Obrigado pela resposta. Ainda não cheguei na parte do While como repetição, parece mais simples e legível mesmo. Ajudou, muito.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software