0

I edited my code to the point where it now works:

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)

Reset() Here is the output after I got it to work:

[{"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}]}]}]

The checked answer fixed my problem.

NeptunoXx
  • 38
  • 9
  • 2
    `type((month+1)/2)` will always be `float`, even if it is something like `1.0`. Use `(month+1)/2).is_integer()` instead. – Brian McCutchon Jan 02 '21 at 17:10
  • 1
    Also, even when you do want to check the type, `isinstance()` is usually a better way to do it. Lastly, you should consider whether it's possible to use features of the `datetime` module to accomplish this task; implementing your own date handling code correctly is tricky. – Brian McCutchon Jan 02 '21 at 17:14
  • Can you be more specific about your Question please? Is your question just if modulo is the only option to check if a number is even or odd, or is it anoter question about your code? In the first case, no code is needed, in the last case please post the current output and point out, what is going wrong – jjj Jan 02 '21 at 17:30
  • 2
    I'd note that even if you implement it correctly, your even/odd check's fundamental logic is incorrect for figuring the length of the months. There are seven 31 day months and just four 30 day months (and February, which does it's own thing). Your current logic, even if it worked, would still get August-November wrong. – Blckknght Jan 02 '21 at 17:33
  • 1
    August is now correct i will update my code. The checked answer fixed it. – NeptunoXx Jan 02 '21 at 17:39

2 Answers2

1

Your way to detect even months are wrong. you expect 4/2 to be of type int, but it is not.

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

anyway detecting even/odd by type is very wrong.

you should instead use the modulo operator %

if ((month+1) == 12):
     daysAmount = 31
elif ((month+1)%2) == 0):
     daysAmount = 30
else:
     daysAmount = 31
Lior Cohen
  • 5,570
  • 2
  • 14
  • 30
  • Ok, the 30 and 31 days difference is working now, but February still isn't. I also applied the same thing here: `if (month+1 == 2): daysAmount = 28 if (year%4 == 0): daysAmount = 29` – NeptunoXx Jan 02 '21 at 17:16
1

There are multiple mistakes in this code.

  1. Leap year check is not correct. This is a function to check a leap year:
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. This should be elif:
if ((month+1) == 12):
  1. Even/odd check is not correct. You can use % (modulus operator).
if (month + 1) % 2 == 0:  # even
if (month + 1) % 2 != 0:  # odd
Mushif Ali Nawaz
  • 3,707
  • 3
  • 18
  • 31