Jump to content

indices das listas Ajuda


mymind

Recommended Posts

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

Link to comment
Share on other 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

Link to comment
Share on other 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]
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.