Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # 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
- # day of the month, and the number of days the month has in it)
- 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]}
- def getDOW(month):
- #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
- #it only works for 2013 for now but can be expanded
- # this expects a list from the months dictionary
- centuryCode = 5
- y = 13
- m = month[1] # this will be the second element
- 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
- return w #returns the day of week the first of the month will be on, 0 is sun, 6 is sat
- def formatMonth(month):
- # This just formats the month string to be capitalized
- m = month[0].upper() + month[1:] # uppercase the first element of the string and concatonate with the second element on
- return m
- def formatCal(monthEnd, dayOfWeek):
- # This formats the calendar for the user
- # It takes a monthEnd which is the number of days the month has in it (can easily be extended for leap years)
- # and the day of the week the first of the month is on 0 being sunday and 6 is saturday
- line = 'sun mon tue wed thu fri sat' # print the days
- line1 = list(range(1, 8-dayOfWeek)) # this creates a list of the days that will fit on the first row of the cal
- #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
- line2 = list(range(line1[-1]+1, line1[-1]+8))
- line3 = list(range(line2[-1]+1, line2[-1]+8))
- line4 = list(range(line3[-1]+1, line3[-1]+8))
- line5 = list(range(line4[-1]+1, monthEnd+1)) # this will end the month apropriatly
- # This is all formating junk not really inportant but you can see a few loops are used instead of typing it all out
- print(line)
- print(' '*(dayOfWeek), end=' ') #dayOfWeek can be zero
- for i in line1:
- print(i, end=' ')
- print('\n')
- for line in line2, line3, line4, line5: #this just loops over the lines/lists we described above
- for i in line: # for each element in the list print it with certian spaces according to one or two digits
- if i >= 9:
- print('',i , end=' ')
- else:
- print('',i , end=' ')
- print('\n') # throw a new line in to break them up
- def main():
- month = input('What month? (three letter abbriviation only, q to quit): ') # get user input for three letter month
- while month != 'q': # make a little loop so that entering q will quit
- if month.lower() in months.keys(): # just check if the lowercase input is in the keys of the dict
- key = month.lower() # if it is then lets just use it
- DOW = getDOW(months[key]) # this calls the function returning the day (0-6) that the month starts on
- monthEnd = months[key][0] # gets the months end date
- print('\n')
- print(formatMonth(key)) # prints the month capitolized
- print('------------------------------------')
- print(formatCal(monthEnd, DOW)) #print the calendar
- print('\n')
- month = input('What month? (q to quit): ') # ask for input again for the loop (q to quit)
- else:
- # this input was not int the dictionary keys so just ask again
- print('Only enter the three letter month abbriviation.')
- month = input('What month? (q to quit): ') # q to quit
- if __name__ == '__main__':
- # Start the program
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement