[英]List Comprehension
I am trying to use list comprehension and the power of the nested function to return a list of all Dates being Friday 13 within a given year in the form (dd/mm/yyyy).我正在尝试使用列表理解和嵌套 function 的功能以 (dd/mm/yyyy) 的形式返回给定年份内所有日期为星期五 13 的列表。 I am however having very little luck with nested loops, I would appreciate any assistance I could get with resolving this issue.然而,我在嵌套循环方面运气不佳,我将不胜感激在解决此问题时能得到的任何帮助。
The previously created function to be used is seen as:之前创建的 function 可以看成是:
def day_of_week11(d, m, y):
# Write your code here
day_names =['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']
if m < 3:
y -= 1
m += 12
m -= 2
yd = y % 100
yc = y // 100
day = (d + ((13*m-1)//5) + yd + yd//4 + yc//4 - 2*yc) % 7
day=(math.ceil(day))
if 2>day>=1:
return day_names[0]
elif 3>day>=2:
return day_names[1]
elif 4>day>=3:
return day_names[2]
elif 5>day>=4:
return day_names[3]
elif 6>day>=5:
return day_names[4]
elif 7>day>=6:
return day_names[5]
else:
return day_names[6]
#The function I am attempting to write now is: #The function 我现在尝试写的是:
def not_lucky (yr):
def day_of_week11(d, m, y):
# Write your code here
i=(d, m, y)
return len([i for i in range(12) if day_of_week11(d, m, y)(yr,i+1,13)==4])
from datetime import timedelta, date
given_year=2021
start_date = date(given_year, 1, 1)
end_date = date(given_year+1, 1, 1)
list_of_friday_the_thirteenth=[single_date.strftime("%d/%m/%Y") for single_date in (start_date + timedelta(n) for n in range((end_date-start_date).days)) if single_date.weekday()==4 and single_date.day==13 ]
print(list_of_friday_the_thirteenth)
List comprehension would be too complicated in this case.在这种情况下,列表理解会太复杂。 Possible solution is following:可能的解决方案如下:
from datetime import date, timedelta
def thirteenth_fridays(year):
d = date(year, 1, 1)
if d.weekday() <= 4:
days = 4 - d.weekday()
else:
days = 11 - d.weekday()
d += timedelta(days)
while d.year == year:
if d.day == 13:
yield d.strftime("%d/%m/%Y")
d += timedelta(days = 7)
for d in thirteenth_fridays(2024):
print(d)
Prints印刷
13/09/2024
13/12/2024
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.