Foro de elhacker.net

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
  1. candela = {
  2.    "nombre":"Candela",
  3.    "tareas": [90, 97, 75, 92],
  4.    "pruebas": [88, 40, 94],
  5.    "examenes": [75, 90]
  6.    }
  7. milagros = {
  8.    "nombre":"Milagros",
  9.    "tareas": [100.0, 92.0, 98.0, 100.0],
  10.    "pruebas": [82.0, 83.0, 91.0],
  11.    "examenes": [89.0, 97.0]
  12.    }
  13. ramiro = {
  14.    "nombre":"Ramiro",
  15.    "tareas": [0.0, 87.0, 75.0, 22.0],
  16.    "pruebas": [0.0, 75.0, 78.0],
  17.    "examenes": [100.0, 100.0]
  18. }
  19.  
  20. alumnos=[candela, milagros, ramiro]
  21. for x in [0,1,2,3]:
  22.    print alumnos[x]["nombre"]
  23.    print alumnos[x]["tareas"]
  24.    print alumnos[x]["pruebas"]
  25.    print alumnos[x]["examenes"]
  26.  
  27.  

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

Código:
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
Código:
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
  1. 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
  1. for x in range(3):

Range 3 retorna un array 3 valores empezando en 0

Pero mas simple aún

Código
  1. for x in alumnos:

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