• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

mymind

indices das listas Ajuda

8 mensagens neste tópico

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.....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ppl

ja consegui :

y=alunos.index(rm)

            w = y+1

            del alunos[y:w+1]

            #del alunos[w]

Tank s

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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]

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

['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:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

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