【问题标题】:My statements aren't working and I don't know why [duplicate]我的陈述不起作用,我不知道为什么[重复]
【发布时间】:2021-04-09 00:13:25
【问题描述】:

我将我的代码编辑到现在可以工作的程度:

def Reset():
data = []
data.append({
    'year': now.year,
    'months': []
})
for year in range(len(data)):
    for month in range(12):
        data[year]['months'].append({
            'month': (month + 1),
            'days': []
        })
        if (month+1 == 2):
            daysAmount = 28
            if (is_leap_year(now.year)):
                daysAmount = 29
        elif ((month+1) == 12):
            daysAmount = 31
        elif ((month+1)%2 == 0):
            daysAmount = 30
        else:
            daysAmount = 31
        for day in range(daysAmount):
            data[year]['months'][month]['days'].append({
                'day': (day + 1),
            })
with open('data.json', 'w') as outfile:
    json.dump(data, outfile)

重置() 这是我让它工作后的输出:

[{"year": 2021, "months": [{"month": 1, "days": [{"day": 1}, {"day": 2}, {"day": 3}, {"day": 4}, {"day": 5}, {"day": 6}, {"day": 7}, {"day": 8}, {"day": 9}, {"day": 10}, {"day": 11}, {"day": 12}, {"day": 13}, {"day": 14}, {"day": 15}, {"day": 16}, {"day": 17}, {"day": 18}, {"day": 19}, {"day": 20}, {"day": 21}, {"day": 22}, {"day": 23}, {"day": 24}, {"day": 25}, {"day": 26}, {"day": 27}, {"day": 28}, {"day": 29}, {"day": 30}, {"day": 31}]}, {"month": 2, "days": [{"day": 1}, {"day": 2}, {"day": 3}, {"day": 4}, {"day": 5}, {"day": 6}, {"day": 7}, {"day": 8}, {"day": 9}, {"day": 10}, {"day": 11}, {"day": 12}, {"day": 13}, {"day": 14}, {"day": 15}, {"day": 16}, {"day": 17}, {"day": 18}, {"day": 19}, {"day": 20}, {"day": 21}, {"day": 22}, {"day": 23}, {"day": 24}, {"day": 25}, {"day": 26}, {"day": 27}, {"day": 28}]}, {"month": 3, "days": [{"day": 1}, {"day": 2}, {"day": 3}, {"day": 4}, {"day": 5}, {"day": 6}, {"day": 7}, {"day": 8}, {"day": 9}, {"day": 10}, {"day": 11}, {"day": 12}, {"day": 13}, {"day": 14}, {"day": 15}, {"day": 16}, {"day": 17}, {"day": 18}, {"day": 19}, {"day": 20}, {"day": 21}, {"day": 22}, {"day": 23}, {"day": 24}, {"day": 25}, {"day": 26}, {"day": 27}, {"day": 28}, {"day": 29}, {"day": 30}, {"day": 31}]}, {"month": 4, "days": [{"day": 1}, {"day": 2}, {"day": 3}, {"day": 4}, {"day": 5}, {"day": 6}, {"day": 7}, {"day": 8}, {"day": 9}, {"day": 10}, {"day": 11}, {"day": 12}, {"day": 13}, {"day": 14}, {"day": 15}, {"day": 16}, {"day": 17}, {"day": 18}, {"day": 19}, {"day": 20}, {"day": 21}, {"day": 22}, {"day": 23}, {"day": 24}, {"day": 25}, {"day": 26}, {"day": 27}, {"day": 28}, {"day": 29}, {"day": 30}]}, {"month": 5, "days": [{"day": 1}, {"day": 2}, {"day": 3}, {"day": 4}, {"day": 5}, {"day": 6}, {"day": 7}, {"day": 8}, {"day": 9}, {"day": 10}, {"day": 11}, {"day": 12}, {"day": 13}, {"day": 14}, {"day": 15}, {"day": 16}, {"day": 17}, {"day": 18}, {"day": 19}, {"day": 20}, {"day": 21}, {"day": 22}, {"day": 23}, {"day": 24}, {"day": 25}, {"day": 26}, {"day": 27}, {"day": 28}, {"day": 29}, {"day": 30}, {"day": 31}]}, {"month": 6, "days": [{"day": 1}, {"day": 2}, {"day": 3}, {"day": 4}, {"day": 5}, {"day": 6}, {"day": 7}, {"day": 8}, {"day": 9}, {"day": 10}, {"day": 11}, {"day": 12}, {"day": 13}, {"day": 14}, {"day": 15}, {"day": 16}, {"day": 17}, {"day": 18}, {"day": 19}, {"day": 20}, {"day": 21}, {"day": 22}, {"day": 23}, {"day": 24}, {"day": 25}, {"day": 26}, {"day": 27}, {"day": 28}, {"day": 29}, {"day": 30}]}, {"month": 7, "days": [{"day": 1}, {"day": 2}, {"day": 3}, {"day": 4}, {"day": 5}, {"day": 6}, {"day": 7}, {"day": 8}, {"day": 9}, {"day": 10}, {"day": 11}, {"day": 12}, {"day": 13}, {"day": 14}, {"day": 15}, {"day": 16}, {"day": 17}, {"day": 18}, {"day": 19}, {"day": 20}, {"day": 21}, {"day": 22}, {"day": 23}, {"day": 24}, {"day": 25}, {"day": 26}, {"day": 27}, {"day": 28}, {"day": 29}, {"day": 30}, {"day": 31}]}, {"month": 8, "days": [{"day": 1}, {"day": 2}, {"day": 3}, {"day": 4}, {"day": 5}, {"day": 6}, {"day": 7}, {"day": 8}, {"day": 9}, {"day": 10}, {"day": 11}, {"day": 12}, {"day": 13}, {"day": 14}, {"day": 15}, {"day": 16}, {"day": 17}, {"day": 18}, {"day": 19}, {"day": 20}, {"day": 21}, {"day": 22}, {"day": 23}, {"day": 24}, {"day": 25}, {"day": 26}, {"day": 27}, {"day": 28}, {"day": 29}, {"day": 30}]}, {"month": 9, "days": [{"day": 1}, {"day": 2}, {"day": 3}, {"day": 4}, {"day": 5}, {"day": 6}, {"day": 7}, {"day": 8}, {"day": 9}, {"day": 10}, {"day": 11}, {"day": 12}, {"day": 13}, {"day": 14}, {"day": 15}, {"day": 16}, {"day": 17}, {"day": 18}, {"day": 19}, {"day": 20}, {"day": 21}, {"day": 22}, {"day": 23}, {"day": 24}, {"day": 25}, {"day": 26}, {"day": 27}, {"day": 28}, {"day": 29}, {"day": 30}, {"day": 31}]}, {"month": 10, "days": [{"day": 1}, {"day": 2}, {"day": 3}, {"day": 4}, {"day": 5}, {"day": 6}, {"day": 7}, {"day": 8}, {"day": 9}, {"day": 10}, {"day": 11}, {"day": 12}, {"day": 13}, {"day": 14}, {"day": 15}, {"day": 16}, {"day": 17}, {"day": 18}, {"day": 19}, {"day": 20}, {"day": 21}, {"day": 22}, {"day": 23}, {"day": 24}, {"day": 25}, {"day": 26}, {"day": 27}, {"day": 28}, {"day": 29}, {"day": 30}]}, {"month": 11, "days": [{"day": 1}, {"day": 2}, {"day": 3}, {"day": 4}, {"day": 5}, {"day": 6}, {"day": 7}, {"day": 8}, {"day": 9}, {"day": 10}, {"day": 11}, {"day": 12}, {"day": 13}, {"day": 14}, {"day": 15}, {"day": 16}, {"day": 17}, {"day": 18}, {"day": 19}, {"day": 20}, {"day": 21}, {"day": 22}, {"day": 23}, {"day": 24}, {"day": 25}, {"day": 26}, {"day": 27}, {"day": 28}, {"day": 29}, {"day": 30}, {"day": 31}]}, {"month": 12, "days": [{"day": 1}, {"day": 2}, {"day": 3}, {"day": 4}, {"day": 5}, {"day": 6}, {"day": 7}, {"day": 8}, {"day": 9}, {"day": 10}, {"day": 11}, {"day": 12}, {"day": 13}, {"day": 14}, {"day": 15}, {"day": 16}, {"day": 17}, {"day": 18}, {"day": 19}, {"day": 20}, {"day": 21}, {"day": 22}, {"day": 23}, {"day": 24}, {"day": 25}, {"day": 26}, {"day": 27}, {"day": 28}, {"day": 29}, {"day": 30}, {"day": 31}]}]}]

选中的答案解决了我的问题。

【问题讨论】:

  • type((month+1)/2) 将始终为float,即使它类似于1.0。请改用(month+1)/2).is_integer()
  • 此外,即使您确实想检查类型,isinstance() 通常也是一种更好的方法。最后,您应该考虑是否可以使用datetime 模块的功能来完成此任务;正确实现您自己的日期处理代码很棘手。
  • 您能否更具体地了解您的问题?您的问题是模数是检查数字是偶数还是奇数的唯一选项,还是关于您的代码的另一个问题?第一种情况不需要代码,最后一种情况请贴出当前输出并指出哪里出了问题
  • 我会注意到,即使您正确实施它,您的偶数/奇数检查的基本逻辑对于计算月份的长度也是不正确的。有 7 个 31 天的月份和 4 个 30 天的月份(以及 2 月,它自己做事)。您当前的逻辑,即使它有效,仍然会在 8 月至 11 月出错。
  • 8 月现在是正确的,我将更新我的代码。检查的答案修复了它。

标签: python


【解决方案1】:

这段代码有多个错误。

  1. 闰年检查不正确。这是一个检查闰年的功能:
def is_leap_year(year: int) -> bool:
    """Determine whether a year is a leap year."""
    
    return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0)

is_leap_year(2020)  # True
is_leap_year(2022)  # False
  1. 这应该是elif:
if ((month+1) == 12):
  1. 偶/奇校验不正确。您可以使用%(模运算符)。
if (month + 1) % 2 == 0:  # even
if (month + 1) % 2 != 0:  # odd

【讨论】:

  • 好的,我会使用那个函数!
  • @LarsLagauw 很高兴它对您有所帮助!
【解决方案2】:

您检测偶数月份的方法是错误的。 您希望 4/2 的类型为 int,但事实并非如此。

type((3+1)/2)
<class 'float'>

无论如何按类型检测偶数/奇数是非常错误的。

您应该改用 运算符%

if ((month+1) == 12):
     daysAmount = 31
elif ((month+1)%2) == 0):
     daysAmount = 30
else:
     daysAmount = 31

【讨论】:

  • 好的,30 天和 31 天的区别现在有效,但 2 月仍然无效。我在这里也应用了同样的东西:if (month+1 == 2): daysAmount = 28 if (year%4 == 0): daysAmount = 29
猜你喜欢
  • 2021-11-16
  • 1970-01-01
  • 2016-08-25
  • 1970-01-01
  • 1970-01-01
  • 2020-09-16
  • 2020-09-19
  • 2014-01-17
  • 1970-01-01
相关资源
最近更新 更多