Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

188
Vistas
¿Cómo calcular cuándo serán los 10000 días después de su cumpleaños?

Me pregunto cómo resolver este problema con Python básico ( no se deben usar bibliotecas ): Cómo calcular cuándo será (/ sería) el día 10000 de uno después de su cumpleaños. Por ejemplo, dado el lunes 19/05/2008, el día deseado es el viernes 05/10/2035 (según https://www.durrans.com/projects/calc/10000/index.html?dob=19%2F5%2F2008&e =mc2 )

Lo que he hecho hasta ahora es el siguiente script:

 years = range(2000, 2050) lst_days = [] count = 0 tot_days = 0 for year in years: if((year % 400 == 0) or (year % 100 != 0) and (year % 4 == 0)): lst_days.append(366) else: lst_days.append(365) while tot_days <= 10000: tot_days = tot_days + lst_days[count] count = count+1 print(count)

que estima la edad de la persona después de 10.000 días desde su cumpleaños (para personas nacidas después de 2000). Pero estoy desconcertado de cómo proceder.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Si importa la fecha y hora de la biblioteca

 import datetime your_date = "01/05/2000" (day, month, years) = your_date.split("/") date = datetime.date(int(years), int(month), int(day)) date_10000 = date+datetime.timedelta(days=10000) print(date_10000)

Sin script de biblioteca

 your_date = "20/05/2000" (day, month, year) = your_date.split("/") days = 10000 year = int(year) month = int(month) day = int(day) end=False #m1,m3,m5,m7,m8,m10,m12=31 #m2=28 #m4,m6,m9,m11=30 m=[31,28,31,30,31,30,31,31,30,31,30,31] while end!=True: if(((year % 400 == 0) or (year % 100 != 0) and (year % 4 == 0)) and(days-366>=0)): days-=366 year+=1 elif(((year % 400 != 0) or (year % 100 != 0) and (year % 4 != 0)) and(days-366>=0)): days-=365 year+=1 else: end=True end=False if(((year % 400 == 0) or (year % 100 != 0) and (year % 4 == 0))): m[1]=29 else: m[1]=28 while end!=True: if(days-m[month]>=0): days-=m[month] if(month+1!=12): month+=1 else: year+=1 if(((year % 400 == 0) or (year % 100 != 0) and (year % 4 == 0))): m[1]=29 else: m[1]=28 month=0 else: end=True if(day+days>m[month]): day=day+days-m[month]+1 if(month+1!=12): month+=1 else: year+=1 if(((year % 400 == 0) or (year % 100 != 0) and (year % 4 == 0))): m[1]=29 else: m[1]=28 month=0 else: day=day+days print(day,"/",month,"/",year)
over 4 years ago · Santiago Trujillo Denunciar

0

Aquí hay una solución que se me ocurrió que no involucra bibliotecas ni paquetes, solo bucles y condicionales (cuentas para años bisiestos):

 def isLeapYear(years): if years % 4 == 0: if years % 100 == 0: if years % 400 == 0: return True else: return False else: return True else: return False monthDays = [31,28,31,30,31,30,31,31,30,31,30,31] sum = 0 sumDays = [] for i in monthDays: sumDays.append(365 - sum) sum += i timeInp = input("Please enter your birthdate in the format dd/mm/yyyy\n") timeInp = timeInp.split("/") days = int(timeInp[0]) months = int(timeInp[1]) years = int(timeInp[2]) totDays = 10000 if totDays > 366: if isLeapYear(years): if months == 1 or months == 2: totDays -= (sumDays[months - 1] + 1 - days) + 1 else: totDays -= (sumDays[months - 1] - days) + 1 else: totDays -= (sumDays[months - 1] - days) + 1 months = 1 days = 1 years += 1 while totDays > 366: if isLeapYear(years): totDays -= 366 else: totDays -= 365 years += 1 i = 0 while totDays != 0: if isLeapYear(years): monthDays[1] = 29 else: monthDays[1] = 28 if totDays >= monthDays[i]: months += 1 totDays -= monthDays[i] elif totDays == monthDays[i]: months += 1 totDays = 0 else: days += totDays if days % (monthDays[i] + 1)!= days: days %= monthDays[i] + 1 months += 1 totDays = 0 if months == 13: months = 1 years += 1 i += 1 if i == 12: i = 0 print(str(days) + "/" + str(months) + "/" + str(years))

Como sugiere el nombre, isLeapYear() toma un parámetro years y devuelve un valor booleano.

Nuestro primer paso para este problema, para hacerlo más fácil, es simplemente "traducir" nuestra fecha al próximo año. Esto facilita nuestros cálculos futuros. Para ello, podemos definir un array sumDays que almacene la cantidad de días que tarda cada mes en terminar el año (ir a año nuevo). Luego, restamos esta cantidad de totDays , tomamos en cuenta los años bisiestos y actualizamos nuestras variables.

Lo siguiente es la parte fácil, saltando los años mientras tenemos suficientes días para un año completo.

Una vez que no podemos sumar otro año completo, solo vamos mes a mes hasta que nos quedemos sin días.

¡Espero que esto haya ayudado! Avíseme si necesita más detalles o aclaraciones (o si cometí un error) :)

Ejemplos de casos de prueba:

Entrada #1:

 19/05/2008

Salida #1:

 5/10/2035

Entrada #2:

 05/05/2020

Salida #2:

 21/9/2047

Entrada #3:

 29/02/2020

Salida #3:

 17/7/2047

Revisé la mayoría de mis soluciones con este sitio web:https://www.countcalculate.com/calendar/birthday-in-days/result

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda