7.9. ExercisesΒΆ
-
In Robert McCloskey’s book Make Way for Ducklings, the names of the ducklings are Jack, Kack, Lack, Mack, Nack, Ouack, Pack, and Quack. This loop tries to output these names in order. Save your answer in a variable named
words
and make sure that this value doesn’t get overwritten later in your program.Use map plus a helper function to solve this problem.
prefixes = "JKLMNOPQ" suffix = "ack" words = [first + suffix for first in prefixes]
Of course, that’s not quite right because Ouack and Quack are misspelled. Can you fix it?
-
Use map and filter to filter the hours table to include only managers. In SQL this would be performed using SELECT and WHERE. Hint: Start by creating a list of the names of all managers.
hours = [["Alice", 43], ["Bob", 37], ["Fred", 15]] titles = [["Alice", "Manager"], ["Betty", "Consultant"], ["Bob", "Assistant"]]
-
Use map, len, and filter to decide if the following tables contain a manager that worked at least 40 hours.
hours = [["Alice", 43], ["Bob", 37], ["Fred", 15]] titles = [["Alice", "Manager"], ["Betty", "Consultant"], ["Bob", "Assistant"]]
-
Use some combination of map and filter to create a sequence of functions that combine to average two matrices. A complete solution will provide functions for each level of abstraction.
-
Create a function that takes a value n as input and constructs a multiplication table for whole numbers up to \(n\). Use some combination of map, filter and reduce to solve this problem.
In [1]: row = lambda j, n: list(map(lambda i: j*i, range(1, n+1))) In [2]: table = lambda n: list(map(lambda j: row(j, n), range(1, n+1))) In [3]: table(12) Out[3]: [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24], [3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36], [4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48], [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60], [6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72], [7, 14, 21, 28, 35, 42, 49, 56, 63, 70, 77, 84], [8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96], [9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 99, 108], [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120], [11, 22, 33, 44, 55, 66, 77, 88, 99, 110, 121, 132], [12, 24, 36, 48, 60, 72, 84, 96, 108, 120, 132, 144]]
-
Print out a neatly formatted multiplication table, up to 12 x 12. You should
do this by constructing a string. For full credit, each column should be
right-justified and your solution should include only
map
and helper functions. (You are allowed to use the stringsjoin
andrjust
methods in your helper functions) Hint: Write a lambda function pads a number with the right number of spaces. Use some combination of map, filter and reduce to solve this problem.
-
Write a function that will return the number of digits in an integer.
Use reduce to solve thie problem.
In [4]: from functools import reduce In [5]: numDigits = lambda n: reduce(lambda acc, ch: acc + 1, str(n), 0) In [6]: numDigits(50) Out[6]: 2 In [7]: numDigits(20000)