cj2012 Posted October 14, 2014 Report Share Posted October 14, 2014 (edited) 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 October 14, 2014 by cj2012 Link to comment Share on other sites More sharing options...
susodicho Posted October 14, 2014 Report Share Posted October 14, 2014 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 = 0es 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: 1 Link to comment Share on other sites More sharing options...
cj2012 Posted October 14, 2014 Author Report Share Posted October 14, 2014 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 xDMuchas gracias por tu explicacion susodicho!! Link to comment Share on other sites More sharing options...
susodicho Posted October 14, 2014 Report Share Posted October 14, 2014 (edited) 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 += 1Si te fijas, la variable i sólo se usa para llevar la cuenta de las iteraciones del ciclo while. :huasonto: Edited October 14, 2014 by susodicho Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now