2013-10-14 32 views
1

我目前正在python 3.3.2中製作日曆。現在我有如何移動連續數字的行。 Python 3.3.2

def month_28(): 
    if day == 1: 
     columns = 7 
     for i in range(1, 29): 
      if i % columns != 0: 
       print(i, end= " ") 
       if i <= 9: 
        print(end=" ") 
       else: 
        print(end=" ") 
      else: 
       print(i) 

它打印

February 2013 
Sun Mon Tue Wed Thu Fri Sat 
1  2  3  4  5  6  7 
8  9  10 11 12 13 14 
15 16 17 18 19 20 21 
22 23 24 25 26 27 28 

但是,如果月在星期三結束,我需要二月開始在星期四。一路走來一年。關於如何將2月1日移交5個地點並在星期四開始計算的想法?如果有更好的方法可以在一年內連續打印每月增加的數字。請讓我知道。任何幫助是極大的讚賞。 謝謝。

回答

2

你可以用日曆:如果你想

>>> import calendar 
>>> print calendar.TextCalendar().formatmonth(2013,2,4) 
      February 2013 
Mon Tue Wed Thu Fri Sat Sun 
         1 2 3 
    4 5 6 7 8 9 10 
11 12 13 14 15 16 17 
18 19 20 21 22 23 24 
25 26 27 28 

星期日作爲第一天:

>>> print calendar.TextCalendar(calendar.SUNDAY).formatmonth(2013,2,4) 
      February 2013 
Sun Mon Tue Wed Thu Fri Sat 
          1 2 
    3 4 5 6 7 8 9 
10 11 12 13 14 15 16 
17 18 19 20 21 22 23 
24 25 26 27 28 

概念,日曆是一個表;和一張桌子是一個列表的列表的文本表示:

>>> table=[['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], 
...  ['','','','','','1','2'], 
...  ['3','4','5','6','7','8','9'], 
...  ['10','11','12','13','14','15','16'], 
...  ['17','18','19','20','21','22','23'], 
...  ['24','25','26','27','28','','']] 

如果你想「漂亮打印」該表爲一個日曆,你將需要推出自己的:

def printTable (tbl, borderHorizontal = '-', borderVertical = '|', borderCross = '+'): 
    cols = [list(x) for x in zip(*tbl)] 
    lengths = [max(map(len, map(str, col))) for col in cols] 
    f = borderVertical + borderVertical.join(' {:>%d} ' % l for l in lengths) + borderVertical 
    s = borderCross + borderCross.join(borderHorizontal * (l+2) for l in lengths) + borderCross 
    rtr=[s] 

    for row in tbl: 
     rtr.append(f.format(*row)) 
     rtr.append(s) 

    return '\n'.join(rtr) 

print(printTable(table)) 

打印:

+-----+-----+-----+-----+-----+-----+-----+ 
| Sun | Mon | Tue | Wed | Thu | Fri | Sat | 
+-----+-----+-----+-----+-----+-----+-----+ 
|  |  |  |  |  | 1 | 2 | 
+-----+-----+-----+-----+-----+-----+-----+ 
| 3 | 4 | 5 | 6 | 7 | 8 | 9 | 
+-----+-----+-----+-----+-----+-----+-----+ 
| 10 | 11 | 12 | 13 | 14 | 15 | 16 | 
+-----+-----+-----+-----+-----+-----+-----+ 
| 17 | 18 | 19 | 20 | 21 | 22 | 23 | 
+-----+-----+-----+-----+-----+-----+-----+ 
| 24 | 25 | 26 | 27 | 28 |  |  | 
+-----+-----+-----+-----+-----+-----+-----+ 
0

我知道我不回答這個直接的問題,但還是,你不希望使用calendar模塊?

無論如何,如果您堅持親手操作,模塊datetimedate類中的weekday方法將非常有用。它返回一個從0到6的數字,這正是您需要移位的位數。但是,你的雙for環路將需要工作...

+0

我會,但我在介紹comp大學在我的大學。我們被要求製作一個日曆,要求一年和一天,並相應地顯示。由於我們在介紹,她期望日曆看起來像一個noobie做到了。日曆模塊對我們來說太整潔了,我們不從中學習編程。 =/ – user2877540

+0

OK,然後我沒有幫助了...乾杯... :-) – nickie

+0

對上!只需要開始=)不是一個答案的關鍵..這是沒有樂趣,不會幫助我一點..謝謝! – user2877540