|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 头发 于 2021-6-6 22:27 编辑
- li_run = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
- li_ping = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
- # 每年多少天
- di_n = {}
- for i in range(2000,2021):
- if i % 4 == 0 and i % 100 != 0:
- di_n[i] = li_run
- elif i % 400 == 0:
- di_n[i] = li_run
- else:
- di_n[i] = li_ping
- di_n[2020] = di_n[2020][:9]
- # 2000.1.1周6
- week = [1,1,2,1,1,1,1]
- # 存每天跑多少km
- di_w = {}
- km = 0
- year = 2000
- n = 0
- while year != 2021:
- for m_day in di_n[year]:
- for day in range(1,m_day+1):
- if n < 7:
- if day == 1:
- di_w[day] = 2
- n += 1
- else:
- di_w[day] = week[n]
- n += 1
- else:
- n = 0
- di_w[day] = week[n]
- n += 1
- km += sum(di_w.values())
- if year == 2020:
- print(di_w)
- print(km)
- di_w.clear()
- year += 1
- print(km+2)
- # 8843
复制代码
我用字典给每一天都标了跑多少,然后每月求和加到km上。
最后少的数还特别巧,8843 与网上的8879差一个 10月1号(不含)往后的里程数+上11月的第一天,找了好久也没发现问题所在,求解谢谢
核对了几年中的几天,每天跑的里程数正确
哎,给你仔细分析一下你的代码,问题出在for day in range(1,m_day+1):循环体内:
- #分析一下当n大余7的时候运行情况
- if n < 7: #当n大余7的时候,运行else部分
- if day == 1:
- di_w[day] = 2
- n += 1
- else:
- di_w[day] = week[n]
- n += 1
- else:
- n = 0 #将n重置为0,也就是week中第一位,是周六
- di_w[day] = week[n] #当天的步数是week[0],也就是1步,无论当天是否是1号
- n += 1 #n加1,也就是0+1=1后进入下一循环,因此在第一轮循环以后,n不会再有值为0进入循环体的时候了,所有的周六都会在else中赋值为1,无论是否是1号
复制代码
所以,除了第一次循环中的周六数据会判断是否是1号,而之后所有的周六都是走else部分,无论是否是1号,都是只赋值为1,所以先前在你的代码基础上直接修改,在else里面加入判断是否是1号的部分,你运行一下修改后的代码看看结果是否正确。
不过这样修改,重复代码太多,可以优化一下:
- if day == 1: #首先判断判断是否是1号,是的话直接赋值2
- di_w[day] = 2
- else:
- di_w[day] = week[n] #不是1号就根据星期几来赋值
- n += 1
- if n == 7: #n值等于7了就复位为0,下一轮会依旧判断是否是1号
- n = 0
复制代码
|
|