3
respostas

Função é ignorada pelo console

Estou tentando resolver esse exercício de substituir o nome da lista definindo a seguinte função:

def alterar(nomes):
    print 'Qual nome vc gostaria de alterar?'
    nome = raw_input()
    nome in nomes
    if(nome == True):
            print 'Digite o substituto'
            nomes.index(nome)
            nomes[nomes.index(nome)] = raw_input()

    if(nome == False):
        print 'Nome nao encontrado.'
        menu()

Sendo que o código completo fica desta maneira:

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

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

def remover(nomes):
    print 'Qual nome você gostaria de remover?'
    nome = raw_input()
    nomes.remove(nome)

def alterar(nomes):
    print 'Qual nome vc gostaria de alterar?'
    nome = raw_input()
    nome in nomes
    if(nome == True):
            print 'Digite o substituto'
            nomes.index(nome)
            nomes[nomes.index(nome)] = raw_input()

    if(nome == False):
        print 'Nome nao encontrado.'
        menu()


def menu():
    nomes = []
    escolha= ''
    while (escolha != '0'):
        print 'Digite: 1 para cadastrar, 2 para listar, 3 para remover, 4 para alterar e 0 para terminar'
        escolha = raw_input()

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

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

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

        if(escolha == '4'):
            alterar(nomes)


menu()

Quando digito o número 4 no console do Python ele imprime a primeira parte da função "alterar" perguntando qual o nome o usuário gostaria de alterar, porém ao digitar e apertar enter, ele pula todo o resto da função, chamando o menu novamente. Por que isso acontece?

Não quis olha a resposta do exercício ainda pois queria tentar achar a solução sozinho. Perdoem caso o código esteja muito longe da solução final.

3 respostas

Olá Guilherme,

O problema está naquele "nome in nomes". Se o nome estiver incluído na lista nomes o resultado será True. e será False se não estiver. O problema é que essa informação não é testada dentro do IF.

Você pode tentar algo assim:

def alterar(nomes):
    print 'Qual nome vc gostaria de alterar?'
    nome = raw_input()

if (nome in nomes):
    print 'Digite o substituto'
    nomes[nomes.index(nome)] = raw_input()
else:
    print 'Nome nao encontrado.'

Agora o if irá retornar True ou False dependendo se ocorrência foi encontrada ou não. O seu código dava errado porque ele testava se o nome era igual a True ou False e ele nunca seria nem um nem outro. O conteúdo da variável nome era o que o usuário inseriu.

Também removi a linha que continha "nomes.index(nome)". Ela estava solta e sem propósito.

Espero ter sanado a sua dúvida.

Obrigado pela resposta Leonardo.

Testei com o código que você escreveu e dá erro de sintaxe no "else". De qualquer forma vou tentar continuar o exercício. Obrigado!

Olá Guilherme,

Agora que percebi o que ficou errado. Foi a identação. O bloco do IF deveria ter um espaço em relação ao DEF. O if está dentro do def e não fora.

Agora vai o código alinhado corretamente:

def alterar(nomes):
    print 'Qual nome vc gostaria de alterar?'
    nome = raw_input()

    if (nome in nomes):
        print 'Digite o substituto'
        nomes[nomes.index(nome)] = raw_input()
    else:
        print 'Nome nao encontrado.'