Dadas dos fechas, la tarea es escribir un programa en Python para obtener K fechas al azar.
Entrada: fecha_prueba1, fecha_prueba2 = fecha(2015, 6, 3), fecha(2015, 7, 1), K = 7
Salida: [datetime.date(2015, 6, 18), datetime.date(2015, 6, 25), datetime.date(2015, 6, 29), datetime.date(2015, 6, 11), datetime.date (2015, 6, 11), fechahora.fecha(2015, 6, 10), fechahora.fecha(2015, 6, 24)]
Explicación: se generan 7 fechas aleatorias desde el 3 de junio de 2015 hasta el 1 de julio de 2015.
Entrada: fecha_prueba1, fecha_prueba2 = fecha(2015, 6, 3), fecha(2015, 8, 1), K = 6
Salida: [datetime.date(2015, 6, 20), datetime.date(2015, 7, 22), datetime.date(2015, 6, 29), datetime.date(2015, 6, 18), datetime.date (2015, 6, 13), fechahora.fecha(2015, 7, 14)]
Explicación: se generan 6 fechas aleatorias desde el 3 de junio de 2015 hasta el 1 de agosto de 2015.
Método #1: Usar opciones() + loop + timedelta()
En esto, extraemos todas las fechas en el rango usando loop y timedelta() de 1 día de diferencia. Entre ellos, se eligen K fechas aleatorias mediante el uso de opciones().
Python3
# Python3 code to demonstrate working of # Random K dates in Range # Using choices() + timedelta() + loop from datetime import date, timedelta from random import choices # initializing dates ranges test_date1, test_date2 = date(2015, 6, 3), date(2015, 7, 1) # printing dates print("The original range : " + str(test_date1) + " " + str(test_date2)) # initializing K K = 7 res_dates = [test_date1] # loop to get each date till end date while test_date1 != test_date2: test_date1 += timedelta(days=1) res_dates.append(test_date1) # random K dates from pack res = choices(res_dates, k=K) # printing print("K random dates in range : " + str(res))
Producción:
El rango original: 2015-06-03 2015-07-01
K fechas aleatorias en el rango: [datetime.date(2015, 6, 25), datetime.date(2015, 6, 10), datetime.date(2015, 6, 18), datetime.date(2015, 6, 7) , fechahora.fecha(2015, 6, 4), fechahora.fecha(2015, 6, 16), fechahora.fecha(2015, 6, 12)]
Método #2: Usar randrange() + timedelta() + loop
En esto, se extrae un número total de días entre rangos y ese rango se usa para obtener elementos K veces, agregando un número de índice aleatorio desde la fecha de inicio extraída usando randrange().
Python3
# Python3 code to demonstrate working of # Random K dates in Range # Using randrange() + timedelta() + loop from datetime import date, timedelta import random # initializing dates ranges test_date1, test_date2 = date(2015, 6, 3), date(2015, 7, 1) # printing dates print("The original range : " + str(test_date1) + " " + str(test_date2)) # initializing K K = 7 # getting days between dates dates_bet = test_date2 - test_date1 total_days = dates_bet.days res = [] for idx in range(K): random.seed(a=None) # getting random days randay = random.randrange(total_days) # getting random dates res.append(test_date1 + timedelta(days=randay)) # printing print("K random dates in range : " + str(res))
Producción:
El rango original: 2015-06-03 2015-07-01
K fechas aleatorias en el rango: [datetime.date(2015, 6, 26), datetime.date(2015, 6, 5), datetime.date(2015, 6, 6), datetime.date(2015, 6, 18) , fechahora.fecha(2015, 6, 21), fechahora.fecha(2015, 6, 15), fechahora.fecha(2015, 6, 12)]
Publicación traducida automáticamente
Artículo escrito por manjeet_04 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA