Test Foro de elhacker.net SMF 2.1

Programación => Scripting => Mensaje iniciado por: Joe Fraddy en 25 Agosto 2015, 18:53 PM

Título: error en python corre bien pero marca error
Publicado por: Joe Fraddy en 25 Agosto 2015, 18:53 PM
Tengo un script como este:

Código (python) [Seleccionar]
candela = {
    "nombre":"Candela",
    "tareas": [90, 97, 75, 92],
    "pruebas": [88, 40, 94],
    "examenes": [75, 90]
    }
milagros = {
    "nombre":"Milagros",
    "tareas": [100.0, 92.0, 98.0, 100.0],
    "pruebas": [82.0, 83.0, 91.0],
    "examenes": [89.0, 97.0]
    }
ramiro = {
    "nombre":"Ramiro",
    "tareas": [0.0, 87.0, 75.0, 22.0],
    "pruebas": [0.0, 75.0, 78.0],
    "examenes": [100.0, 100.0]
}

alumnos=[candela, milagros, ramiro]
for x in [0,1,2,3]:
    print alumnos[x]["nombre"]
    print alumnos[x]["tareas"]
    print alumnos[x]["pruebas"]
    print alumnos[x]["examenes"]



Y corre bien, hace lo que quiero, pero al último genera este error:

Traceback (most recent call last):
  File "alumnos.py", line 22, in <module>
    print alumnos[x]["nombre"]
IndexError: list index out of range

Título: Re: error en python corre bien pero marca error
Publicado por: engel lex en 25 Agosto 2015, 18:57 PM
alumnos=[candela, milagros, ramiro]
for x in [0,1,2,3]:


Es decir primero le dices "tienes un array con 3 valores (candela, milagros, ramiro) pero necesito que me del el valor de los primeros 4 (0,1,2,3) que crees que sucederá al leer el cuarto valor(3)?
Título: Re: error en python corre bien pero marca error
Publicado por: Joe Fraddy en 25 Agosto 2015, 19:00 PM
Si, ya entiendo era un error lógico, solo tenia que poner:

Código (python) [Seleccionar]
for x in [0,1,2]:

Porque el cuarto valor no existe xD :-)
Título: Re: error en python corre bien pero marca error
Publicado por: engel lex en 25 Agosto 2015, 19:06 PM
Para simplificarlo mas puedes hacerlo de las siguientes 2 maneras

Código (python) [Seleccionar]
for x in range(3):

Range 3 retorna un array 3 valores empezando en 0

Pero mas simple aún

Código (python) [Seleccionar]
for x in alumnos:

Este ultimo es especialmente util cuando el array es asociativo o no sabes cuantos valores tiene