Jump to content

Reiniciar recorrido de arreglo a 0 (pos actual y siguiente)?


cj2012

Recommended Posts

Hola!

 

Se que es uuna pregunta super basica, pero he estado tantos dias haciendo un codigo en python + pygame q ya ni pienso y me estoy cabezeando con algo super sencillo.

 

Tengo un arreglo con imagenes, lugar de donde las obtengo para procesarlas.

 

Necesito usar una funcion blend de PIL python para superponer 2 imagenes, y por eso pretendo usar las imagenes almacenadas en el arreglo.

 

La imagen resultado seria combinar las imagenes de una posicion actual + posicion siguiente.

 

 

El arreglo es asi:

 

 

fotos [foto0,foto1,foto2,foto3]

 

 

Lo que quiero hacer es recorrer el arreglo de manera de obtener la foto 0 y foto 1, o foto 1 y foto 2 sucesivamente pero al momento de llegar al final del arreglo se vuelvan a la primera casilla.

 

 

En este momento se me desborda el arreglo, ya que al ir en la posicion3, la imagen siguiente ya es 4 y esta fuera del arreglo.

 

 

Un codigo ejemplo ( esta malo), pero la idea es que al llegar cualquiera de los 2 contadores, el contador o el siguiente al final del arreglo, se reinicie a 0.

array = [0,1,2,3]
contador = 0
siguiente = contador +1

for contador in range (0,10):
    if contador > len(array):
            contador = 0
    siguiente = contador +1
    if siguiente > len(array):
            siguiente = 0

    print contador
    
    print siguiente    

Alguien me puede ayudar??

Muchas gracias!

 

 

 

 

 

 

Edited by cj2012
Link to comment
Share on other sites

Para esas cosas generalmente usas el módulo (resto de una división). Además ten claro que los arreglos parten en el índice 0, así que array[len(array)] ya está fuera de rango, o sea, los índices van de 0 a len(array) - 1. Por eso, la condición

    if contador > len(array):
            contador = 0
es incorrecta, debería ser if contador >= len(array):, aunque aun así no haría lo que tú esperas ;) .

 

Aquí está la versión modificada de tu código:

array = [11,22,33,44]

contador = 0

siguiente = contador +1
siguiente %= len(array)

for contador in range (0,10):
    contador %= len(array)
    siguiente = contador +1
    siguiente %= len(array)

    print array[contador]
    
    print array[siguiente]
:huasonto:
  • Upvote 1
Link to comment
Share on other sites

Ahora entiendo por que no me funcionaba, siempre se me desbordaba o seguia en cuentas de 5 para arriba a pesar de limitar a volver a 0.

No pensaba que el error fuera por q el indice partiera de 0, juraba que eso ya lo tenia arreglado xD


Muchas gracias por tu explicacion susodicho!!

Link to comment
Share on other sites

Para completar un poco, si quieres hacerlo usando el enfoque inicial, tienes que tener claro que la variable que usas para iterar no la puedes usar como índice para el arreglo (porque la tienes que volver a cero mientras se ejecuta el ciclo). Así que el código quedaría más o menos así (usando if como lo tenías en tu código original):

array = [11,22,33,44]

i = 0
contador = 0

while i < 10:
    if contador >= len(array):
        contador = 0
    siguiente = contador + 1
    if siguiente >= len(array):
        siguiente = 0

    print array[contador]
    
    print array[siguiente]

    contador += 1
    i += 1
Si te fijas, la variable i sólo se usa para llevar la cuenta de las iteraciones del ciclo while.

 

:huasonto:

Edited by susodicho
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...