0

カレンダーを書いてみました。しかし、for ループは最初の月の日のみを出力します。ループの後の日数を印刷しようとすると、機能します。誰が何が起こっているのか知っていますか?

cal_year = input('Enter a year (YYYY): ')

def not_common(year):
    if (year % 4 == 0):
        if (year % 100 == 0):
            if (year % 400 == 0):
                return 1
            else:
                return 0
        else:
            return 1
    else:
        return 0

leap = not_common(cal_year)

if leap == 0:
    print 'This is not a leap year'

elif leap == 1:
    print 'This is a leap year'

else:
    print 'unexpected calculation error'

y1900=1


day = ((cal_year-1900)*365)%7

month = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']
calendar = [range(1,32), range(1,29), range(1,32), range(1,31), range(1,32), range(1,31),\
         range(1,32),range(1,32),range(1,31),range(1,32),range(1,31),range(1,32)]

if (leap == 1):
    calendar[1] = range(1,30)

week = ['su','mo','tu','we','th','fr','sa']
r = 0
for i in range(0,12):
    print month[i]
    print ' '.join(str(y) for y in week)
    for j in range (1, (len(calendar[i])/7)+2):
        #cal =' '.join(str(x).zfill(2) for x in calendar[i][r*7:7*(r+1)])
            print ' '.join(str(x).zfill(2) for x in calendar[i][r*7:7*(r+1)])
            r += 1   
    print

print calendar[1]
print calendar[11]

問題の行は次のように考えられています: ' '.join(str(x).zfill(2) for x in calendar[i][r*7:7*(r+1)])

4

1 に答える 1

1

r新しい月が始まるたびに、最初からやり直す必要があります。

ただし、コードには他の問題があります。毎月が日曜日に始まり、正確に 7 日の倍数であると仮定しています。

于 2012-05-17T14:47:10.290 に答える