# PENSAR -> ¿Cómo lo haría yo? ¿Cómo le explico al ordenador como lo haría yo? # divide y vencerás: Todo problema está hecho de problemas más pequeños # PRACTICAR y practicar y practicar MAS QUE LEER import datetime # Crear una función cuanto_falta que nos devuelva los dias que faltan para el fin de # semana. Si ya es fin de semana devolvemos 0 (es mucho más fácil de lo que parece) # cuanto_falta(fecha) -> dias hasta el siguiente fin de semana # saber el día de la semana weekday (0-lunes y 6 domingo) # 0 lunes faltan 5 0+5=5 # 1 martes faltan 4 1+4=5 #... 4 viernes falta 1 4+1=5 5-weekday # 5 sabado faltan 0 # 6 domingo 0 def cuanto_falta(fecha): dia_semana=fecha.weekday() if dia_semana>=5: # in [5,6] return 0 else: return 5-dia_semana print(cuanto_falta(datetime.date(2023,10,16))) # Crear una función primero_de_mes a la que le pasemos un año y nos devuelva una lista # de fechas del 1 de cada mes de ese año: # # primero_de_mes(2024) -> ['2024-01-01'.'2024-02-01',...'2024-12-01'] # ¿Cómo creo yo una fecha a partir de numeros? # datetime.date(año,mes,dia) año->check me lo pasan dia->check siempre es 1 # ¿mes? del 1 al 12 ¿Se hacer un bucle del 1 al 12? for i in range(1,13) # crear una lista lista vacia: [] # añado a la lista: append # ¿Cuantas fechas tengo que crear? 12 una por cada mes def primero_de_mes(anyo): res=[] for i in range(1,13): res.append(datetime.date(anyo,i,1)) return res print(primero_de_mes(2023)) # Crear una funcion fines_de_semana a la que le pasemos un año y un mes y nos devuelva # una lista con todos los fines de semana: # # fines_de_semana(10,2023) -> ['2023-10-01','2023-10-07','2023-10-08',...,'2023-10-29'] # me recorro todos los dias de ese mes y si es fin de semana lo añado a la lista # empiezo por el 1 del mes de ese año, voy sumando un día en un bucle y si el dia es fin # de semana lo añado a la lista # crear una fecha a partir de año mes y dia # sumar un dia a una fecha? + timedelta(days=1) # se si es fin de semana? si el weekday es 5 o 6 # febrero tego que ir del 1 al 28 ¿Cómo lo se yo? # lista con los dias del mes [31,28,31,30,31,30,31,31,30,31,30,31] # el bucle lo hago añadiendo un día, 2023-2-27, 2023-2-28,2023-3-1 # 2023-10-29,2023-10-30,2023-10-31,2023-11-1 # mientras el mes de mi fecha sea el mes que me han pasado sigo en el bucle # en cuanto sea diferente paro def fines_de_semana(mes,anyo): fecha=datetime.date(anyo,mes,1) res=[] while fecha.month==mes: if fecha.weekday() in [5,6]: res.append(fecha) fecha+=datetime.timedelta(days=1) return res print(fines_de_semana(10,2023))