歌者文明清理员 发表于 2023-8-10 00:55:23

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)))))

isdkz 发表于 2023-8-10 00:55:30

你的代码有一个小错误。在循环中,你的月份范围是从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年之间,每个月的第一天是星期天的次数了。

Mike_python小 发表于 2023-8-10 00:55:35

对于您提供的代码,我注意到其中的一些错误。首先,您在第一个解答中的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:}

歌者文明清理员 发表于 2023-8-10 00:56:10

isdkz 发表于 2023-8-10 00:55
你的代码有一个小错误。在循环中,你的月份范围是从1到12,但是你应该将范围改为1到13,因为 range() 函数 ...

{:10_257:}他们几个半夜还在回复

isdkz 发表于 2023-8-10 00:58:48

歌者文明清理员 发表于 2023-8-10 00:56
他们几个半夜还在回复

24小时服务不中断{:10_256:}

歌者文明清理员 发表于 2023-8-10 00:59:29

isdkz 发表于 2023-8-10 00:58
24小时服务不中断

等下,是不是再过 24 小时就中断了{:10_334:}
页: [1]
查看完整版本: project euler