Chapter 7 Exercise Set 0: Chapter Review¶
Doctest Exercises¶
In each of the following exercises, write Python code to make the doctests pass.
class Foo: """ >>> foo = Foo(42, 'eggs') >>> foo.num 42 >>> foo.food 'eggs' >>> foo.message() 'I love eggs!' """
class Bar: """ >>> bar = Bar() >>> bar.this 'Ni!' >>> bar.that 'shrubbery' >>> bar.speak(2) 'Ni! Ni!' >>> bar.speak(5) 'Ni! Ni! Ni! Ni! Ni!' """
class Seqtools: """ >>> myseq = Seqtools([1, 2, 'a', 7, ('x', 'y'), 'yup', 11.3, True]) >>> myseq.data [1, 2, 'a', 7, ('x', 'y'), 'yup', 11.3, True] >>> myseq.nums() [1, 2, 7, 11.3] >>> myseq.seqs() ['a', ('x', 'y'), 'yup'] >>> myseq.others() [True] """
Point¶
distance(p1, p2)
¶
Write a distance
function that takes two Point
s as parameters and
returns the distance between them. It should pass the following doctests:
def distance(p1, p2):
"""
>>> p1 = Point(1, 2)
>>> p2 = Point(4, 6)
>>> distance(p1, p2)
5.0
>>> p3 = Point(16, 11)
>>> distance(p2, p3)
13.0
"""
Rewrite your distance
function as a method inside the Point
class. The
new doctests should look like this:
def distance(self, other):
"""
>>> p1 = Point(1, 2)
>>> p2 = Point(4, 6)
>>> p1.distance(p2)
5.0
>>> p3 = Point(16, 11)
>>> p2.distance(p3)
13.0
"""
Note
Add this method to a module named point.py
that contains the complete
Point
class as described in the chapter.
Time¶
Printing Time
s¶
Rewrite the print_time
method from the chapter so that it overloads the
built-in print
function and add it to the Time
class described in the
chapter in a module named my_time.py
. Be sure your new method returns a
string instead of calling print
.
Once you are finished, you should be able to import your class and do the following:
>>> from my_time import Time
>>> t = Time(9, 30, 0)
>>> print(t)
9:30:00
increment
¶
Rewrite the increment
method so that it doesn’t contain any loops.
Now rewrite increment
as a pure function, and write method calls to both
versions.
convert_to_seconds
¶
Convert the function convert_to_seconds
:
def convert_to_seconds(t):
minutes = t.hours * 60 + t.minutes
seconds = minutes * 60 + t.seconds
return seconds
to a method in the Time
class.
find
¶
Add a fourth parameter, end
, to the find
function that specifies where
to stop looking. Warning: This exercise is a bit tricky. The default value of
end
should be len(str)
, but that doesn’t work. The default values are
evaluated when the function is defined, not when it is called. When find
is defined, str
doesn’t exist yet, so you can’t find its length.
NumberSet
¶
Fill in the class NumberSet
with data attributes and methods to make
the doctests pass.
class NumberSet:
"""
>>> nums = NumberSet([2, 4, 6])
>>> print(nums)
[2, 4, 6]
>>> nums.mean()
4.0
>>> nums.median()
4
>>> nums.mode()
[2, 4, 6]
>>> nums2 = NumberSet([1, 2, 6, 6])
>>> nums2.mean()
3.75
>>> nums2.median()
4.0
>>> nums2.mode()
[6]
>>> numset = [3, 5, 19, 42, 5, 42, 11]
>>> nums3 = NumberSet(numset)
>>> nums3.numlist
[3, 5, 5, 11, 19, 42, 42]
>>> numset
[3, 5, 19, 42, 5, 42, 11]
>>> round(nums3.mean())
18
>>> nums3.median()
11
>>> nums3.mode()
[5, 42]
"""