问题
生成20200101至20231231日的大写日期,例如:二〇二三年十二月三十一日,常用的使用场景为文章的落款,同时爬虫人也知道了,原始内容反写为短日期
目的
锻炼python基础知识的使用,函数,def,if,列表,join,数字除法运算等
实现思路
编写数字转换函数
首先,需要编写一个函数 to_chinese_number,用于将阿拉伯数字转换为中文大写数字。这个函数的输入是一个整数,输出是相应的中文大写数字字符串。
生成日期函数:
然后,需要编写一个生成日期的函数 generate_dates。在这个函数中,我们使用嵌套的循环来遍历从 2023 年到 2019 年的年份、月份和日期。对于每个日期,我们将调用 to_chinese_number 函数将年份、月份和日期转换为中文大写形式,并将它们拼接成一个字符串。
考虑月份和日期的不同情况
在生成日期的过程中,我们需要考虑不同月份的天数情况,以及闰年的情况。因此,在循环中需要进行适当的条件判断,确定每个月的最大天数。
实现代码
def to_chinese_number(n):
"""
将阿拉伯数字转换为中文大写数字
"""
chinese_nums = ['〇', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十']
if n == 0:
return chinese_nums[0]
elif n <= 10:
return chinese_nums[n]
elif n < 20:
return '十' + chinese_nums[n - 10]
elif n < 100:
tens = n // 10
ones = n % 10
if ones == 0:
return chinese_nums[tens] + '十'
else:
return chinese_nums[tens] + '十' + chinese_nums[ones]
def generate_dates():
"""
生成20230101至20201231日期的大写形式
"""
for year in range(2023, 2019, -1):
chinese_year = ''.join([to_chinese_number(int(d)) for d in str(year)])
for month in range(12, 0, -1):
max_day = 31
if month in [4, 6, 9, 11]:
max_day = 30
elif month == 2:
if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
max_day = 29
else:
max_day = 28
chinese_month = to_chinese_number(month)
for day in range(max_day, 0, -1):
chinese_day = to_chinese_number(day)
date_str = f"{chinese_year}年{chinese_month}月{chinese_day}日"
yield date_str
for date in generate_dates():
print(date)