近日需要编程计算每个月的第二个星期二是哪一天,因为那一天需要做一件重要的事情,我想在这个日期做一个提醒,于是把这个重任交给当下最火的AI,微软new bing和chatGPT,实验对比结果如下:微软new bing会给你参考文献和代码,辅助你去完成编程,不会给出编程的运行结果,而chatGPT更多是倾向给你完整的答案,包括代码和运行结果,然而有时候会出现言多必失的囧境,总的来说,二者都可以快速帮助程序员写代码。
提问:帮忙写一个python脚本,功能是打印每个月的第二个星期二
ailx10
1960 次咨询
网络安全优秀回答者
互联网行业 安全攻防员
去咨询
微软new bing的回答:
# 导入datetime模块
import datetime
# 定义一个函数,输入年份和月份,返回该月第二个星期二的日期
def second_tuesday(year, month):
# 创建一个datetime对象,表示该月的第一天
first_day = datetime.date(year, month, 1)
# 获取该月第一天是星期几(0表示星期一,6表示星期日)
weekday = first_day.weekday()
# 计算该月第一个星期二是几号(如果第一天是星期二,则为1号,否则为8减去weekday)
first_tuesday = 1 if weekday == 1 else 8 - weekday
# 计算该月第二个星期二是几号(在第一个星期二的基础上加7天)
second_tuesday = first_tuesday + 7
# 返回一个datetime对象,表示该月第二个星期二的日期
return datetime.date(year, month, second_tuesday)
# 定义一个循环,从2023年1月开始到2023年12月结束
for month in range(1,13):
# 调用函数,打印每个月的第二个星期二的日期
print(second_tuesday(2023, month))
# 运行结果:错误
2023-01-09
2023-02-13
2023-03-13
2023-04-10
2023-05-15
2023-06-12
2023-07-10
2023-08-08
2023-09-11
2023-10-09
2023-11-13
2023-12-11
稍加修改,该月第一个星期二的计算公式:(8- weekday)%7+1
# 导入datetime模块
import datetime
# 定义一个函数,输入年份和月份,返回该月第二个星期二的日期
def second_tuesday(year, month):
# 创建一个datetime对象,表示该月的第一天
first_day = datetime.date(year, month, 1)
# print("first_day:{}".format(first_day))
# 获取该月第一天是星期几(0表示星期一,6表示星期日)
weekday = first_day.weekday()
# print("weekday:{}".format(weekday))
# 计算该月第一个星期二是几号(如果第一天是星期二,则为1号,否则为8减去weekday)
first_tuesday = (8 - weekday)%7+1
# print("first_tuesday:{}".format(first_tuesday))
# 计算该月第二个星期二是几号(在第一个星期二的基础上加7天)
second_tuesday = first_tuesday + 7
# 返回一个datetime对象,表示该月第二个星期二的日期
return datetime.date(year, month, second_tuesday)
# 定义一个循环,从2023年1月开始到2023年12月结束
for month in range(1,13):
# 调用函数,打印每个月的第二个星期二的日期
print(second_tuesday(2023, month))
# 运行结果:正确
2023-01-10
2023-02-14
2023-03-14
2023-04-11
2023-05-09
2023-06-13
2023-07-11
2023-08-08
2023-09-12
2023-10-10
2023-11-14
2023-12-12
再来看看chatGPT
import datetime
# 设置起始日期为2023年1月1日
start_date = datetime.date(2023, 1, 1)
# 循环打印每个月的第二个星期二的日期
for i in range(12):
# 计算第二个星期二的日期
day_of_week = 1 # 星期二对应的数字为1
second_tuesday = start_date + datetime.timedelta(days=(day_of_week - start_date.weekday() + 7) % 7 + 7)
# 打印输出
print("{}年{}月第二个星期二是:{}".format(start_date.year, start_date.month, second_tuesday.strftime('%Y-%m-%d')))
# 更新起始日期为下个月的第一天
start_date = start_date.replace(month=start_date.month + 1, day=1)
# 运行结果:正确
2023年1月第二个星期二是:2023-01-10
2023年2月第二个星期二是:2023-02-14
2023年3月第二个星期二是:2023-03-14
2023年4月第二个星期二是:2023-04-11
2023年5月第二个星期二是:2023-05-09
2023年6月第二个星期二是:2023-06-13
2023年7月第二个星期二是:2023-07-11
2023年8月第二个星期二是:2023-08-08
2023年9月第二个星期二是:2023-09-12
2023年10月第二个星期二是:2023-10-10
2023年11月第二个星期二是:2023-11-14
2023年12月第二个星期二是:2023-12-12
其实,我是带有一点私心的,关于这个例子的描述,我情感上偏向了chatGPT,因为new bing限制了我的使用次数,实际上说心里话,chatGTP和new bing 都带给我很大的惊喜。
发布于 2023-03-06 22:34・IP 属地江苏