project euler
本帖最后由 歌者文明清理员 于 2023-8-10 01:05 编辑https://fishc.com.cn/thread-232176-1-1.html
我的答案:
import datetime
count = 0
for y in range(1901, 2001):
for m in range(1, 12):
date = datetime.date(y, m, 1).weekday()
if date == 0:
count += 1
print(count)
写到一行:
print(sum(map(lambda x: __import__('datetime').date(*x, 1).weekday() == 0, zip(list(range(1901, 2001)), list(range(1, 12)) * 100))))
哪里错了{:10_277:}输出了14
自己解决了:
[*]忽略了“左闭右开”性质
[*]列表枚举错误,list(range(1901, 2001)) 是 ,共 100 项;而第二个参数有 11(更正后是 12)* 100 = 1200 项,所以只有前面的 100 项有效。
我的本意是两个 iterable 组合,查到了 itertools.product
更正后代码:
import datetime
count = 0
for y in range(1901, 2001):
for m in range(1, 13):
date = datetime.date(y, m, 1).weekday()
if date == 0:
count += 1
print(count)
print(sum(map(lambda x: __import__('datetime').date(*x, 1).weekday() == 0, __import__('itertools').product(range(1901, 2001), range(1, 13)))))
你的代码有一个小错误。在循环中,你的月份范围是从1到12,但是你应该将范围改为1到13,因为 range() 函数的结束值是不包含在范围内的。这样,你才能正确地迭代到12月。
所以你的代码应该改成这样:
import datetime
count = 0
for y in range(1901, 2001):
for m in range(1, 13):
date = datetime.date(y, m, 1).weekday()
if date == 0:
count += 1
print(count)
这样修改后,你的代码就能正确地计算出从1901年到2000年之间,每个月的第一天是星期天的次数了。 对于您提供的代码,我注意到其中的一些错误。首先,您在第一个解答中的range函数中的第二个参数应为13而不是12,以便迭代到12月份。此外,在第二个解答中,由于lambda函数使用zip函数与多个参数列表进行操作,导致生成的时间戳超出了实际范围。您可以尝试以下修正:
import datetime
count = 0
for y in range(1901, 2001):
for m in range(1, 13):
date = datetime.date(y, m, 1).weekday()
if date == 6:# 注意这里将0改为6,表示星期日
count += 1
print(count)
print(sum(map(lambda x: __import__('datetime').date(*x, 1).weekday() == 6, zip(list(range(1901, 2001)), list(range(1, 13)) * 100))))
这些修正将正确统计出从1901年到2000年间每个月的第一天是星期日的次数。
希望这能够解决您的问题。如果您还有其他问题,请随时提问。
球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
isdkz 发表于 2023-8-10 00:55
你的代码有一个小错误。在循环中,你的月份范围是从1到12,但是你应该将范围改为1到13,因为 range() 函数 ...
{:10_257:}他们几个半夜还在回复 歌者文明清理员 发表于 2023-8-10 00:56
他们几个半夜还在回复
24小时服务不中断{:10_256:} isdkz 发表于 2023-8-10 00:58
24小时服务不中断
等下,是不是再过 24 小时就中断了{:10_334:}
页:
[1]