2012-05-17 118 views
0

我試圖寫一個日曆。但for循環只會打印出第一個月的日子。如果我嘗試打印循環後的日子,它將工作。有誰知道發生了什麼事?Python: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] 

麻煩的線被認爲是: '。加入(STR(x)的.zfill(2)在日曆X [I] [R * 7:7 *(R + 1)] )

+0

@馬克的答案指出了這個程序的一些問題。另一個問題是你計算'日',假定在給定年份和1900年之間沒有閏年。這實際上並沒有影響代碼,因爲它不會使用'日'。 –

回答

1

每次開始新月時,您需要重新輸入值r

但是,您的代碼還有其他問題,您假定每個月都是在星期天開始,並且具有7天的確切倍數。