es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Declaración específica cada N iteraciones en Python

Quiero crear un bucle que, cada 12 meses, la variable ‘year’ deberá incrementarse en 1 hasta alcanzar el límite. No pude hacerlo por mi cuenta. Esto es lo que intenté (en este caso, el resultado final debería ser en 2013):

years=[]
begin=2010
for i in range(0,40):
    year=begin
    if ((i % 12 == 0) and (i != 0)):       
        year+=1
        years.append(year)
    else:
        years.append(year)
years

El único resultado que obtengo es: [2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2011, 2010, 2010…]

¡Cualquier ayuda es muy apreciada!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Hay dos problemas con el código:

    1. La variable year se reinicia a begin en cada iteración del bucle, por eso la salida solo muestra el valor 2010.
    2. La condición (i % 12 == 0) and (i != 0) verifica si el índice es múltiplo de 12, pero debería verificar si el número de años transcurridos es múltiplo de 12.

    Aquí tienes una posible solución:

    years = []
    begin = 2010
    limit = 2014
    num_years = 0
    for i in range(0, 48):
        year = begin + num_years
        years.append(year)
        num_years += 1
        if num_years % 12 == 0 and year < limit:
            num_years = 0
    

    Explicación:

    • La lista years se inicializa como una lista vacía.
    • La variable begin se establece como el año de inicio (2010).
    • La variable limit se establece como el año final (2014).
    • La variable num_years se inicializa en 0 y llevará el seguimiento del número de años transcurridos desde el año de inicio.
    • El bucle se ejecutará 48 veces (4 años x 12 meses) y realizará los siguientes pasos:
      • Calcular la variable year sumando begin y num_years.
      • Agregar year a la lista years.
      • Incrementar num_years en 1.
      • Si num_years es múltiplo de 12 y year es menor que limit, reiniciar num_years a 0.
    • Al final del bucle, la lista years contendrá la secuencia [2010, 2011, 2012, 2013].

    ¡Espero que esto ayude!

Comments are closed.