Difference between revisions of "Rchan sandbox"
(→Part 1 - Simple Object Class with external functions) |
|||
Line 91: | Line 91: | ||
:5 If you pay a little bit attention on the outputs, you should notice that the sum_times() function did not carry 60 minutes over to hour. It also will not carry 60 seconds over to minute. | :5 If you pay a little bit attention on the outputs, you should notice that the sum_times() function did not carry 60 minutes over to hour. It also will not carry 60 seconds over to minute. | ||
:6 To fix that problem, perform the following: | :6 To fix that problem, perform the following: | ||
− | ::(a) Edit the file '''lab7a.py''' and modify the function sum_times(). Add code to check the values of the time object's three attributes. If the value of the minute attribute is more than 60, carry it over to the hour until it is less than 60. Do the same for the value of the second attribute. | + | ::(a) Edit the file '''lab7a.py''' and modify the function sum_times(). Add code to check the values of the time object's three attributes. If the value of the minute attribute is more than 60, carry it over to the hour until it is less than 60. Do the same for the value of the second attribute. |
− | ::(b) Save the file. | + | ::(b) The follow indicates where you should perform the carry over in the sum_times() function in '''lab7a.py''':<source lang="python"> |
+ | ... | ||
+ | ... | ||
+ | def sum_times(t1, t2): | ||
+ | """Add two time objests and return the sum.""" | ||
+ | sum = Time(0,0,0) | ||
+ | sum.hour = t1.hour + t2.hour | ||
+ | sum.minute = t1.minute + t2.minute | ||
+ | sum.second = t1.second + t2.second | ||
+ | |||
+ | #[ insert python code here to check for minute and second | ||
+ | #[ attribute here, and carry over when necessary | ||
+ | #[ | ||
+ | return sum | ||
+ | ... | ||
+ | ... | ||
+ | </source> | ||
+ | ::(c) Save the file. | ||
+ | ::(d) Test run your script '''lab7a1.py''' again and make sure that it produces the output that match the following exactly:<source lang="bash"> | ||
+ | [rchan@centos7 lab7]$ python3 lab7a1.py | ||
+ | 08:00:00 + 00:50:00 --> 08:50:00 | ||
+ | 08:55:00 + 00:50:00 --> 09:45:00 | ||
+ | 09:50:00 + 00:50:00 --> 10:40:00 | ||
+ | </source> | ||
:7. Download the checking script and check your work. Enter the following commands from the bash shell.<source lang="bash"> | :7. Download the checking script and check your work. Enter the following commands from the bash shell.<source lang="bash"> | ||
cd ~/ops435/lab7/ | cd ~/ops435/lab7/ |
Revision as of 14:33, 2 November 2019
OPS435 Python Lab 7
Contents
OBJECTIVES
- Create functions to process programmer-defined type objects.
- Binding functions into methods for programmer-defined type objects.
Overview
- Object-oriented programming is conceptually one level higher than simply structured programming style as you've experienced in Bash or C. In this lab, we're going to look at a few object-oriented programming examples using the Python language.
Reference:
- Time object from Think Python Chapter 16 and 17
- Date object from OPS435 Assignment 1
Investigation I: Objects and Functions
Part 1 - Simple Object Class with external functions
In this part, we consider a time object which has three data attributes, namely: hour, minute, and second. The following Python script lab7a.py provides the blue print for building such a time object and also defines three external functions that can manipulate the time object.
#!/usr/bin/env python3
class Time:
"""Simple object type for time of the day.
data attributes: hour, minute, second
"""
def __init__(self,hour=12,minute=0,second=0):
"""constructor for time object"""
self.hour = hour
self.minute = minute
self.second = second
def format_time(t):
"""Return time object (t) as a formatted string"""
return '%.2d:%.2d:%.2d' % (t.hour, t.minute, t.second)
def sum_times(t1, t2):
"""Add two time objests and return the sum."""
sum = Time(0,0,0)
sum.hour = t1.hour + t2.hour
sum.minute = t1.minute + t2.minute
sum.second = t1.second + t2.second
return sum
def valid_time(t):
"""check for the validity of the time object attributes:
24 > hour > 0
60 > minute > 0
60 > second > 0 """
if t.hour < 0 or t.minute < 0 or t.second < 0:
return False
if t.minute >= 60 or t.second >= 60 or t.hour >= 24:
return False
return True
- Perform the following steps:
- 1. Download or create the above Pythone script lab7a.py in your ~/ops435/lab7 directory.
- 2. Create a new Python script named lab7a1.py in the lab7 directory:
cd ~/ops435/lab7
vi ~/ops435/lab7/lab7a1.py
- 3. Place the following content inside the new python file lab7a1.py and save it:
#!/usr/bin/env python3 # Student ID: [seneca_id] from lab7a import * t1 = Time(8,0,0) t2 = Time(8,55,0) t3 = Time(9,50,0) td = Time(0,50,0) tsum1 = sum_times(t1,td) tsum2 = sum_times(t2,td) tsum3 = sum_times(t3,td) ft = format_time print(ft(t1),'+',ft(td),'-->',ft(tsum1)) print(ft(t2),'+',ft(td),'-->',ft(tsum2)) print(ft(t3),'+',ft(td),'-->',ft(tsum3))
- 4. The above python script lab7a1.py should produce the following output when executed:
[rchan@centos7 lab7]$ python3 lab7a1.py 08:00:00 + 00:50:00 --> 08:50:00 08:55:00 + 00:50:00 --> 08:105:00 09:50:00 + 00:50:00 --> 09:100:00
- 5 If you pay a little bit attention on the outputs, you should notice that the sum_times() function did not carry 60 minutes over to hour. It also will not carry 60 seconds over to minute.
- 6 To fix that problem, perform the following:
- (a) Edit the file lab7a.py and modify the function sum_times(). Add code to check the values of the time object's three attributes. If the value of the minute attribute is more than 60, carry it over to the hour until it is less than 60. Do the same for the value of the second attribute.
- (b) The follow indicates where you should perform the carry over in the sum_times() function in lab7a.py:
... ... def sum_times(t1, t2): """Add two time objests and return the sum.""" sum = Time(0,0,0) sum.hour = t1.hour + t2.hour sum.minute = t1.minute + t2.minute sum.second = t1.second + t2.second #[ insert python code here to check for minute and second #[ attribute here, and carry over when necessary #[ return sum ... ...
- (c) Save the file.
- (d) Test run your script lab7a1.py again and make sure that it produces the output that match the following exactly:
[rchan@centos7 lab7]$ python3 lab7a1.py 08:00:00 + 00:50:00 --> 08:50:00 08:55:00 + 00:50:00 --> 09:45:00 09:50:00 + 00:50:00 --> 10:40:00
- 7. Download the checking script and check your work. Enter the following commands from the bash shell.
cd ~/ops435/lab7/ pwd #confirm that you are in the right directory ls CheckLab7.py || wget https://ict.senecacollege.ca/~raymond.chan/ops435/labs/LabCheckScripts/CheckLab7.py python3 ./CheckLab7.py -f -v lab7a
- 8. Before proceeding, make certain that you identify all errors in lab7a.py. When the checking script tells you everything is OK - proceed to the next step.