Advertisement
Guest User

calendar-r/learnpython

a guest
Jan 22nd, 2013
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.85 KB | None | 0 0
  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()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement