3
respostas

Pq quando o programa entra na função menu, pela chamada q existe lá em baixo, o "nome = []" não apaga oq tem dentro da lista ??

def listar(nomes):
    print'Listando nomes'
    for nome in nomes:
        print nome

def cadastrar(nomes):
    print 'Digite o nome'
    nomes.append(raw_input())

def menu():
    nomes = []
    escolha = ''
    while(escolha != '0'):
        print '1 para cadastrar - 0 para terminar'
        escolha = raw_input()

        if(escolha == '1'):
            cadastrar(nomes)

        if(escolha == '2'):
            listar(nomes)

        if(escolha == '3'):
            remover(nomes)

menu()
3 respostas

Oi, Iuri! Não sei se entendi muito bem a pergunta... Quando a função menu() é executada, a variável nomes é inicializada como uma lista vazia. A questão é que o loop while roda independente disso, a lista não é criada para cada passada do while.

Não Yan, não me refiro dentro do while, me refiro ao final do código, deixa eu formular melhor minha dúvida.

Quando iniciamos o código o python passa inicializando todas as funções e no final executa o comando menu() que faz com que o python entre dentro da função menu, la dentro ele cria a lista vazia "nomes = []" até ai ok, mas agora suponhamos que eu digite 1 para entrar na função cadastrar, o python vai até a função cadastrar, eu faço tudo lá dentro e no final(como não tem return nem nada) ele sai da função e corre todo o programa de novo até chegar lá em baixo e se deparar com "menu()" novamente. Minha dúvida é, pq q pela segunda vez q ele passa por "menu()" ao entrar na função menu a lista nomes não é sobreposta por "nomes = []", pois quando eu estou dentro de outra função, por exemplo listar, quando eu chamo a função menu() a lista é sobreposta, mas quando o propio programa faz isso não, minha dúvida é essa.

Pq todas as vezes ele executa "escolha = ' ' "(tanto q entramos dentro do while novamente), mas é como não executasse "nomes = []"

Espero ter sido mais claro agora, caso ainda tenha dúvida tente executar o código a seguir e veja que como há um "menu()" você irá conseguir listar porem da próxima vez q tentar chamar a função listar ela iria retornar uma lista vazia.

def listar(nomes):
    print'Listando nomes'
    for nome in nomes:
        print nome
    menu()

def cadastrar(nomes):
    print 'Digite o nome'
    nomes.append(raw_input())


def menu():
    nomes = []
    escolha = ''
    while(escolha != '0'):
        print '1 para cadastrar - 0 para terminar'
        escolha = raw_input()

        if(escolha == '1'):
            cadastrar(nomes)

        if(escolha == '2'):
            listar(nomes)

        if(escolha == '3'):
            remover(nomes)

menu()

Iuri, é dentro do while sim! A função menu() é executada uma única vez nesse código, por isso a variável nomes é inicializada como uma lista vazia uma única vez. Você só está saindo do código dentro da função menu() quando o programa se encerra. Enquanto ele está rodando, o código dentro do bloco while (dentro da função menu()) fica se repetindo, e nele não se reinicializa a variável nomes.