1,760
edits
Changes
Created page with "Category:OPS435-PythonCategory:rchan = Overview = When making back up of data files or log files, it is a very common practice to name the backup directories and/or fi..."
[[Category:OPS435-Python]][[Category:rchan]]
= Overview =
When making back up of data files or log files, it is a very common practice to name the backup directories and/or files based on the date the backup was done. In order to restore or locate the directory/file, we often need to find out the backup date from today's date.
The task for this assignment is to write a python program with appropriate functions which will take a date in the "YYYYMMDD" format and the number of day before or after the given date as the command line arguments, and output the actual date which is the number of day before or after the given date in the same format.
= Coding Standard =
* PEP-8
== Command Line Argument to be supported ==
== Required Functions ==
= Due Date =
This Assignment is due on Sunday October 14, 2018. Submit on blackboard under the assignments section.
All your Python code for this program must be placed in a <font color='red'><b><u>single source file</u></b></font>. Please include the following declaration by <b><u>you</u></b> as a comment in your Python source code file (replace "Student Name" with your own name):
<source>OPS435 Assignment 1 - Fall 2018
Program: [student_id].py (replace student_id with your Seneca User name)
Author: "Student Name"
The python code in this file ([Student_id].py) is original work written by
"Student Name". No code in this file is copied from any other source
except those provided by the course instructor, including any person, textbook,
or on-line resource. I have not shared this python program with anyone or
anything except for submission for grading.
I understand that the Academic Honesty Policy will be enforced and violators
will be reported and appropriate action will be taken.
</source>
= Instruction =
== Program Name and valid command line arguments ==
Name your python3 program as <code>[Student_id].py</code>. The program should accept two command line parameters, the first one is the date in "YYYYMMDD" format, and the second one is the number of day from the given date, a position value indicates the number of days after the given date, and a negative value indicates the number of days before the given date. There is an option called --step that makes the program print out all dates until the final date. If the "YYYYMMDD" format is broken give an appropriate error message. Invalid months (>12) or invalid days of month(different for each month), should be detected and give appropriate error messages. For examples:
* <b><code>python3 dbda.py 20180101 1</code></b>, and the output should be<br />
20180102
* <b><code>python3 dbda.py 20180101 -1</code></b>, and the output should be<br />
20171231
* <b><code>python3 dbda.py 20180101 2</code></b>, and the output should be<br />
20180103
* <b><code>python3 dbda.py --step 20180101 3</code></b>, and the output should be<br />
20180102
20180103
20180104
* <b><code>python3 dbda.py 20180701 500</code></b>, and the output should be<br />
20191113
* <b><code>python3 dbda.py 20189901 2</code></b>, and the output should be<br />
Error: wrong month entered
* <b><code>python3 dbda.py 20180199 2</code></b>, and the output should be<br />
Error: wrong day entered
* <b><code>python3 dbda.py 2018 2</code></b>, and the output should be<br />
Error: wrong date entered
If there is too few or too many command line parameters given, display the proper usage.
== Program structure ==
Your program code should all be in a single python file with at least two functions, one called yesterday() and the other called tomorrow():
* The yesterday() function will take a date in "YYYYMMDD" format and return the date of the previous day in the same format.
* The tomorrow() function will take a date in "YYYYMMDD" format and return the date of the next day in the same format. Next paragraph is a sample python code for the tomorrow() function.
<pre>
#!/usr/sbin/env python3
import ...
def tomorrow(today):
....
return next_day
def yesterday(today):
....
return previous_day
....
if __name__ == __main__:
.. processing command line arguments ..
.. set loop based on the number of days given
.. call tomorrow() or yesterday() as appropriate
...
output the expected date
</pre>
=== Sample code for the tomorrow() function ===
<pre>
# Return the date in YYYYMMDD after the given day
#
def tomorrow(today):
if len(today) != 8:
return '00000000'
else:
year = int(today[0:4])
month = int(today[4:6])
day = int(today[6:])
lyear = year % 4
if lyear == 0:
feb_max = 29 # this is a leap year
else:
feb_max = 28 # this is not a leap year
lyear = year % 100
if lyear == 0:
feb_max = 28 # this is not a leap year
lyear = year % 400
if lyear == 0:
feb_max = 29 # this is a leap year
tmp_day = day + 1 # tomorrow's day
mon_max = { 1:31, 2:feb_max, 3:31, 4:30, 5:31, 6:30, 7:31, 8:31, 9:30, 10:31, 11:30, 12:31}
if tmp_day > mon_max[month]:
to_day = tmp_day % mon_max[month] # if tmp_day > this month's max, reset to 1
tmp_month = month + 1
else:
to_day = tmp_day
tmp_month = month + 0
if tmp_month > 12:
to_month = 1
year = year + 1
else:
to_month = tmp_month + 0
next_date = str(year)+str(to_month).zfill(2)+str(to_day).zfill(2)
return next_date
</pre>
= Overview =
When making back up of data files or log files, it is a very common practice to name the backup directories and/or files based on the date the backup was done. In order to restore or locate the directory/file, we often need to find out the backup date from today's date.
The task for this assignment is to write a python program with appropriate functions which will take a date in the "YYYYMMDD" format and the number of day before or after the given date as the command line arguments, and output the actual date which is the number of day before or after the given date in the same format.
= Coding Standard =
* PEP-8
== Command Line Argument to be supported ==
== Required Functions ==
= Due Date =
This Assignment is due on Sunday October 14, 2018. Submit on blackboard under the assignments section.
All your Python code for this program must be placed in a <font color='red'><b><u>single source file</u></b></font>. Please include the following declaration by <b><u>you</u></b> as a comment in your Python source code file (replace "Student Name" with your own name):
<source>OPS435 Assignment 1 - Fall 2018
Program: [student_id].py (replace student_id with your Seneca User name)
Author: "Student Name"
The python code in this file ([Student_id].py) is original work written by
"Student Name". No code in this file is copied from any other source
except those provided by the course instructor, including any person, textbook,
or on-line resource. I have not shared this python program with anyone or
anything except for submission for grading.
I understand that the Academic Honesty Policy will be enforced and violators
will be reported and appropriate action will be taken.
</source>
= Instruction =
== Program Name and valid command line arguments ==
Name your python3 program as <code>[Student_id].py</code>. The program should accept two command line parameters, the first one is the date in "YYYYMMDD" format, and the second one is the number of day from the given date, a position value indicates the number of days after the given date, and a negative value indicates the number of days before the given date. There is an option called --step that makes the program print out all dates until the final date. If the "YYYYMMDD" format is broken give an appropriate error message. Invalid months (>12) or invalid days of month(different for each month), should be detected and give appropriate error messages. For examples:
* <b><code>python3 dbda.py 20180101 1</code></b>, and the output should be<br />
20180102
* <b><code>python3 dbda.py 20180101 -1</code></b>, and the output should be<br />
20171231
* <b><code>python3 dbda.py 20180101 2</code></b>, and the output should be<br />
20180103
* <b><code>python3 dbda.py --step 20180101 3</code></b>, and the output should be<br />
20180102
20180103
20180104
* <b><code>python3 dbda.py 20180701 500</code></b>, and the output should be<br />
20191113
* <b><code>python3 dbda.py 20189901 2</code></b>, and the output should be<br />
Error: wrong month entered
* <b><code>python3 dbda.py 20180199 2</code></b>, and the output should be<br />
Error: wrong day entered
* <b><code>python3 dbda.py 2018 2</code></b>, and the output should be<br />
Error: wrong date entered
If there is too few or too many command line parameters given, display the proper usage.
== Program structure ==
Your program code should all be in a single python file with at least two functions, one called yesterday() and the other called tomorrow():
* The yesterday() function will take a date in "YYYYMMDD" format and return the date of the previous day in the same format.
* The tomorrow() function will take a date in "YYYYMMDD" format and return the date of the next day in the same format. Next paragraph is a sample python code for the tomorrow() function.
<pre>
#!/usr/sbin/env python3
import ...
def tomorrow(today):
....
return next_day
def yesterday(today):
....
return previous_day
....
if __name__ == __main__:
.. processing command line arguments ..
.. set loop based on the number of days given
.. call tomorrow() or yesterday() as appropriate
...
output the expected date
</pre>
=== Sample code for the tomorrow() function ===
<pre>
# Return the date in YYYYMMDD after the given day
#
def tomorrow(today):
if len(today) != 8:
return '00000000'
else:
year = int(today[0:4])
month = int(today[4:6])
day = int(today[6:])
lyear = year % 4
if lyear == 0:
feb_max = 29 # this is a leap year
else:
feb_max = 28 # this is not a leap year
lyear = year % 100
if lyear == 0:
feb_max = 28 # this is not a leap year
lyear = year % 400
if lyear == 0:
feb_max = 29 # this is a leap year
tmp_day = day + 1 # tomorrow's day
mon_max = { 1:31, 2:feb_max, 3:31, 4:30, 5:31, 6:30, 7:31, 8:31, 9:30, 10:31, 11:30, 12:31}
if tmp_day > mon_max[month]:
to_day = tmp_day % mon_max[month] # if tmp_day > this month's max, reset to 1
tmp_month = month + 1
else:
to_day = tmp_day
tmp_month = month + 0
if tmp_month > 12:
to_month = 1
year = year + 1
else:
to_month = tmp_month + 0
next_date = str(year)+str(to_month).zfill(2)+str(to_day).zfill(2)
return next_date
</pre>