Chapter 5 Exercise Set 2¶
Open a file named
ch05warmups.py
and make the following doctests pass:""" >>> 13 in junk True >>> del junk[4] >>> junk [3, 7, 9, 10, 17, 21, 24, 27] >>> del junk[a:b] >>> junk [3, 7, 27] """
""" >>> nlist[2][1] 0 >>> nlist[0][2] 17 >>> nlist[1][1] 5 """
""" >>> mystring.split('??') ['this', 'and', 'that'] """
Only a string that appears as the first line in a file is the docstring for that file, and only doctests in that string will run.
Add the first set of tests to a string at the beginning of the file, make them all pass, then add the second set of tests to the same docstring, make them all pass, and then add the last doctest and make it pass.
Note
We will study how this works in much greater detail in the Maps, files, and modules chapter.
Doctest practice set 3¶
Put the next two exercises in a file named ch05practice3.py
.
lots_of_letters
¶
Write a function named
lots_of_letters
that takes a word (string) as an argument and returns a new string with the first letter once, the second letter twice, the third letter three times, and so forth.Your function should pass the following doctests:
def lots_of_letters(word): """ >>> lots_of_letters('Lidia') 'Liidddiiiiaaaaa' >>> lots_of_letters('Python') 'Pyyttthhhhooooonnnnnn' >>> lots_of_letters('') '' >>> lots_of_letters('1') '1' """
What will happen if you pass this function a list or tuple instead of a string? Explain your answer.
seperate_by_type
¶
Write a function named
seperate_by_type
that takes a list of values of any type and returns a 3-tuple of lists containing the numbers, sequences, and other types from the argument list in the same order in which they originally occurred.Your function should pass the following doctests:
def seperate_by_type(list_of_stuff): """ >>> seperate_by_type([3, 'a', 4.2, None, (1, 2), 'b']) ([3, 4.2], ['a', (1, 2), 'b'], [None]) >>> seperate_by_type([1, 3, 'xyz', 42, (0, 2), 'qwerty', [1, 0], 12]) ([1, 3, 42, 12], ['xyz', (0, 2), 'qwerty', [1, 0]], []) >>> seperate_by_type([]) ([], [], []) """
numberlists
¶
Create a new file named
numberlists.py
and add the following functions to it:def only_evens(numbers): """ >>> only_evens([1, 3, 4, 6, 7, 8]) [4, 6, 8] >>> only_evens([2, 4, 6, 8, 10, 11, 0]) [2, 4, 6, 8, 10, 0] >>> only_evens([1, 3, 5, 7, 9, 11]) [] >>> only_evens([4, 0, -1, 2, 6, 7, -4]) [4, 0, 2, 6, -4] >>> nums = [1, 2, 3, 4] >>> only_evens(nums) [2, 4] >>> nums [1, 2, 3, 4] """
def only_odds(numbers): """ >>> only_odds([1, 3, 4, 6, 7, 8]) [1, 3, 7] >>> only_odds([2, 4, 6, 8, 10, 11, 0]) [11] >>> only_odds([1, 3, 5, 7, 9, 11]) [1, 3, 5, 7, 9, 11] >>> only_odds([4, 0, -1, 2, 6, 7, -4]) [-1, 7] >>> nums = [1, 2, 3, 4] >>> only_odds(nums) [1, 3] >>> nums [1, 2, 3, 4] """
Be sure these new functions pass the doctests.
multiples_of(num, numlist)
¶
Add a function
multiples_of(num, numlist)
tonumberlists.py
that takes an integer (num
), and a list of integers (numlist
) as arguments and returns a list of those integers innumlist
that are multiples ofnum
. Add your own doctests and use TDD to develope this function.
s.join(s.split(song)
vs. s
¶
Given:
import string song = "The rain in Spain..."
Describe the relationship between
string.join(string.split(song))
andsong
. Are they the same for all strings? When would they be different?
replace(s, old, new)
¶
Write a function
replace(s, old, new)
that replaces all occurences ofold
withnew
in a strings
.def replace(s, old, new): """ >>> replace('Mississippi', 'i', 'I') 'MIssIssIppI' >>> s = 'I love spom! Spom is my favorite food. Spom, spom, yum!' >>> replace(s, 'om', 'am') 'I love spam! Spam is my favorite food. Spam, spam, spam, yum!' >>> replace(s, 'o', 'a') 'I lave spam! Spam is my favarite faad. Spam, spam, spam, yum!' """
Hint
Your solution should pass the doctests above. Hint: use
split
andjoin
string methods.
Alarm clock¶
You look at the clock and it is exactly 2 pm. You set an alarm to go off in 51 hours. At what time does the alarm go off?
def will_ring(timenow, hourslater): """ """
Generalized alarm clock¶
Write a Python program to solve the general version of the above problem. Ask the user for the time now (in hours), and ask for the number of hours to wait. Your program should output what the time will be on the clock when the alarm goes off.
Week days¶
Assume the days of the week are numbered 0, 1, 2, 3, 4, 5, 6 from Sunday to Saturday. Write a program which is given the day number, and it computes the day name (a string).
Wonderful holiday¶
You go on a wonderful holiday leaving on day number 3 (a Wednesday). You return home after 137 sleeps. Write a general version of the program which asks for the starting day number, and the length of your stay, and it will tell you the name of day of the week on which you will return.
Greatest Common Factor (GCF)¶
The greatest common factor of two positive integers,
m
andn
, is the largest positive integer that that will divide bothm
andn
evenly.def gcf(m, n): """ >>> gcf(10, 25) 5 >>> gcf(8, 12) 4 >>> gcf(5, 12) 1 >>> gcf(24, 12) 12 """
Write a function body for
gcf
that will make the doctests pass.Note
There is a well known recursive algorithm to solve this problem named after the Greek mathematician who described it in one of his books. Do a web search for this and see if you can use it to solve this problem.