Ir para o conteúdo
mymind

indices das listas Ajuda

Mensagens Recomendadas

mymind    0
mymind

boas

imaginemos que pretendo elaborar o seguinte programa:

"""

Considere ainda o mesmo problema das idades dos alunos de uma escola,

mas suponha agora que os parâmetros de entrada das definições são

dados relativos às idades e aos nomes dos alunos. Implemente as seguintes

definições:

a) Adicionar/Remover aluno/idade

;) Determinar idade de um aluno

c) Alterar idade de um aluno

d) Somar 1 a todas as idades.

e) Determinar idade do aluno mais velho.

f) Determinar idade do aluno mais novo.

g) Eliminar os dados do(s) aluno(s) mais velho(s).

"""

def intralunos():

    alunos=['uriel',29,'ligia',36,'hugo',20,'sequeira',25,'bugalho',28]

    print alunos

    altera=input('    O que pretende fazer: 1 = Adicionar Alunos , 2 Remover Alunos')

    if altera == 1:

        adiciona=raw_input('Qual é o nome do aluno: ')

        alunos.append(adiciona)

        adiciona=input('Qual é a idade do aluno: ')

        alunos.append((adiciona))

        print alunos

    else:

        altera == 2

        rm=raw_input('Qual é o nome do aluno que pretende remover: ')

        if rm in alunos:

            y=alunos.index(rm)

            w = y+1

            del alunos[y]

            del alunos[w]

            print alunos

        else:

            print 'Esse aluno não corresponde a um aluno da lista: '

Agora o mais estranho está a ser :

quando executo e indico um nome da lista para remover , ele deveria me remover o nome e a idade do aluno .....

acontece que ele remove me apenas o nome e o nome seguinte deixando as idades na lista......

alguem me pode tentar explicar onde estou a errar ???

Obrig.....

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
djthyrax    11
djthyrax

Outra possibilidade era fazer:

y=alunos.index(rm)

            del alunos[y]

            del alunos[y]

Porque o elemento y+1, quando apagas um elemento antes dele, passa a ser o elemento y.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
mymind    0
mymind

boas

bem visto ....

obrigado....

mas eu gostaria de ter umas outras coisas esclarecidas ....

a 1 todos os dados que estão na lista são tratados como o seu tipo correcto???

pergunto pk!

porque vamos supor que tenho a lista referida no 1 post.

['uriel', 29, 'ligia', 36, 'hugo', 20, 'sequeira', 25, 'bugalho', 28]

gostaria de somar o numero 1 a cada idade dos alunos

então decidi puxar o valor de cada posição da qual consta um inteiro tipo e utilizar o slicing para optimizar melhor o codigo:

tipo:      new_list=alunos[::2]

            print new_list

mas o que acontece e que ele ignora me ......

e dá me o seguinte

>>>> ['uriel', 'ligia', 'hugo', 'sequeira', 'bugalho']

ora, se nas listas os indices começam em zero(0) então era suposto obter uma nova lista so com as idades ??????

seria possivel alguem dar me uma explicação de o porque do comer dos numeros e apenas cospe as string s....

tan k s

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Tharis    3
Tharis

Não. Muito simplesmente porque o slicing funciona da seguinte maneira:

[PRIMEIRO_ÍNDICE (inclusive) : ÚLTIMO_ÍNDICE (exclusive) : SALTO]

Ao omitires os índices, assumes que o primeiro é 0 e o último é len(new_lista).

Então, a lista retornada será constituída por todos os elementos que tenham índices da forma: 0 + 2n = 2n. Ou seja, só índices pares.

Como muito bem disseste, começa-se a indexagem pelo zero. Logo, se começa no 0 e vais sempre adicionando 2, vais ter os índices pares. E quais são os elementos nas posições pares? Os nomes.

>>> alunos = ['uriel', 29, 'ligia', 36, 'hugo', 20, 'sequeira', 25, 'bugalho', 28]
>>> new_list = alunos[1::2]
>>> print new_list
[29, 36, 20, 25, 28]

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
mymind    0
mymind

mt obrigado ma freind.....

""""

new_list_alunos=alunos[1::2]

    for i in range(len(new_list_alunos)):

        new_list_alunos=new_list_alunos+1

    print new_list_alunos

""""

Work s like a charm....

:cheesygrin:

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
hmiguel    0
hmiguel

['uriel', 29, 'ligia', 36, 'hugo', 20, 'sequeira', 25, 'bugalho', 28]

Posso fazer uma sugestão?

Com dicionários ficava melhor e até mais fácil de utilizar  :confused:

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
djthyrax    11
djthyrax

Exacto, ou se não puderes usar dicionários, uma lista de tuplas. Pode não ficar tão funcional, mas fica mais legível, pelo menos para mim.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade