Check out the Pastebin Gadgets Shop. We have thousands of fun, geeky & affordable gadgets on sale :-)Want more features on Pastebin? Sign Up, it's FREE!
tweet

# calendar-r/learnpython

By: a guest on Jan 22nd, 2013  |  syntax: Python  |  size: 3.85 KB  |  views: 24  |  expires: Never
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
1. # we can set up the months as a dictionary so we can easily access extra data about them (like the month factor for calculating the start
2. # day of the month, and the number of days the month has in it)
3. months = {'jan':[31,0], 'feb':[28,3], 'mar':[31,3], 'apr':[30,6], 'may':[31,1], 'jun':[30,4], 'jul':[31,6], 'aug':[31,2], 'sept':[30,5], 'oct':[31,0], 'nov':[30,3], 'dec':[31,5]}
4.
5.
6. def getDOW(month):
7.     #this will get the day of the week the month starts on according to a quick google search leading to this website http://www.jimloy.com/math/day-week.htm
8.     #it only works for 2013 for now but can be expanded
9.     # this expects a list from the months dictionary
10.     centuryCode = 5
11.     y = 13
12.     m = month[1] # this will be the second element
13.     w = (centuryCode + y + (y//4)+1 + m + 1) % 7 # The final '1' is because the day factor needed is for the day the month will begin on
14.     return w #returns the day of week the first of the month will be on, 0 is sun, 6 is sat
15.
16.
17. def formatMonth(month):
18. # This just formats the month string to be capitalized
19.     m = month[0].upper() + month[1:] # uppercase the first element of the string and concatonate with the second element on
20.     return m
21.
22. def formatCal(monthEnd, dayOfWeek):
23. # This formats the calendar for the user
24. # It takes a monthEnd which is the number of days the month has in it (can easily be extended for leap years)
25. # and the day of the week the first of the month is on 0 being sunday and 6 is saturday
26.     line = 'sun  mon  tue  wed  thu  fri  sat' # print the days
27.     line1 = list(range(1, 8-dayOfWeek)) # this creates a list of the days that will fit on the first row of the cal
28.     #These all take the ending date of the previous line e.g. 6 add 1 and create a list that will fit on that line i.e. equal to 7
29.     line2 = list(range(line1[-1]+1, line1[-1]+8))
30.     line3 = list(range(line2[-1]+1, line2[-1]+8))
31.     line4 = list(range(line3[-1]+1, line3[-1]+8))
32.     line5 = list(range(line4[-1]+1, monthEnd+1)) # this will end the month apropriatly
33.     # This is all formating junk not really inportant but you can see a few loops are used instead of typing it all out
34.     print(line)
35.     print('     '*(dayOfWeek), end=' ') #dayOfWeek can be zero
36.     for i in line1:
37.         print(i, end='    ')
38.
39.     print('\n')
40.
41.     for line in line2, line3, line4, line5: #this just loops over the lines/lists we described above
42.         for i in line: # for each element in the list print it with certian spaces according to one or two digits
43.             if i >= 9:
44.                 print('',i , end='  ')
45.
46.             else:
47.                 print('',i , end='   ')
48.         print('\n') # throw a new line in to break them up
49.
50. def main():
51.     month = input('What month? (three letter abbriviation only, q to quit): ') # get user input for three letter month
52.
53.     while month != 'q': # make a little loop so that entering q will quit
54.
55.         if month.lower() in months.keys(): # just check if the lowercase input is in the keys of the dict
56.             key = month.lower() # if it is then lets just use it
57.             DOW = getDOW(months[key]) # this calls the function returning the day (0-6) that the month starts on
58.             monthEnd = months[key][0] # gets the months end date
59.             print('\n')
60.             print(formatMonth(key)) # prints the month capitolized
61.             print('------------------------------------')
62.             print(formatCal(monthEnd, DOW)) #print the calendar
63.             print('\n')
64.             month = input('What month? (q to quit): ') # ask for input again for the loop (q to quit)
65.
66.         else:
67.             # this input was not int the dictionary keys so just ask again
68.             print('Only enter the three letter month abbriviation.')
69.             month = input('What month? (q to quit): ') # q to quit
70.
71.
72. if __name__ == '__main__':
73.     # Start the program
74.     main()
clone this paste RAW Paste Data
Top