Programming Assignment 1 (Month Calendar)

Calendar

Write a Python program that reads two command line parameters, month (between 1 and 12) and year (between 1 and 9999), and produces the calendar for specified month in the specified year. The format of the calendar is given in the sample runs shown later.
  1. To read command line parameters, you can use the folowing code:
    import sys
    
    month = int(sys.argv[1])
    year = int(sys.argv[2])
    
  2. To determine day of week for the first of the month, you can use the following code:
    from datetime import date
    
    d = date(year,month,1)
    day_of_week = (d.weekday()+1)%7
    
  3. To catch errors in input you should use the try-except statement as follows:
    try:
      month = int(sys.argv[1])
      year = int(sys.argv[2])
      ...
      ...
    except Exception as e:
      print(str(e))
    
Here are some sample runs of the program:
Mac-mini:cal raj$ python3 Cal.py 7 2022
     July 2022
Su Mo Tu We Th Fr Sa
                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 29 30 
31 

Mac-mini:cal raj$ python3 Cal.py 10 1958
    October 1958
Su Mo Tu We Th Fr Sa
          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 29 30 31 

Mac-mini:cal raj$ python3 Cal.py 15 2022
month must be in 1..12

Mac-mini:cal raj$ python3 Cal.py 10 20022
year 20022 is out of range

Mac-mini:cal raj$ python3 Cal.py abc 2022
invalid literal for int() with base 10: 'abc'

Mac-mini:cal raj$ python3 Cal.py 10 2022a
invalid literal for int() with base 10: '2022a'

Mac-mini:cal raj$ python3 Cal.py 10
list index out of range

Mac-mini:cal raj$ python3 Cal.py
list index out of range

Challenge Problem (for extra credit)

Modify your program to also accept just the year as a command line parameter and print the calendar for the entire year as shown in the following run:
mirage:~ rsunderraman$ python3 Cal.py 2022
                            2022
      January               February               March          
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  
                   1         1  2  3  4  5         1  2  3  4  5  
 2  3  4  5  6  7  8   6  7  8  9 10 11 12   6  7  8  9 10 11 12  
 9 10 11 12 13 14 15  13 14 15 16 17 18 19  13 14 15 16 17 18 19  
16 17 18 19 20 21 22  20 21 22 23 24 25 26  20 21 22 23 24 25 26  
23 24 25 26 27 28 29  27 28                 27 28 29 30 31        
30 31                                                             

       April                  May                   June          
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  
                1  2   1  2  3  4  5  6  7            1  2  3  4  
 3  4  5  6  7  8  9   8  9 10 11 12 13 14   5  6  7  8  9 10 11  
10 11 12 13 14 15 16  15 16 17 18 19 20 21  12 13 14 15 16 17 18  
17 18 19 20 21 22 23  22 23 24 25 26 27 28  19 20 21 22 23 24 25  
24 25 26 27 28 29 30  29 30 31              26 27 28 29 30        
                                                                  

        July                 August              September        
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  
                1  2      1  2  3  4  5  6               1  2  3  
 3  4  5  6  7  8  9   7  8  9 10 11 12 13   4  5  6  7  8  9 10  
10 11 12 13 14 15 16  14 15 16 17 18 19 20  11 12 13 14 15 16 17  
17 18 19 20 21 22 23  21 22 23 24 25 26 27  18 19 20 21 22 23 24  
24 25 26 27 28 29 30  28 29 30 31           25 26 27 28 29 30     
31                                                                

      October               November              December        
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  
                   1         1  2  3  4  5               1  2  3  
 2  3  4  5  6  7  8   6  7  8  9 10 11 12   4  5  6  7  8  9 10  
 9 10 11 12 13 14 15  13 14 15 16 17 18 19  11 12 13 14 15 16 17  
16 17 18 19 20 21 22  20 21 22 23 24 25 26  18 19 20 21 22 23 24  
23 24 25 26 27 28 29  27 28 29 30           25 26 27 28 29 30 31