## Homework 24 due Monday November 12 before class

- Six modules are to be defined.

- Each module defines one function.

- Each module also has a
tester.*built-in*

- For this assignment, no late homework is being accepted. Please make sure you submit on time.

### Module luna.py

- Defines a function
`h()`

. The function has a single numeric parameter`x`

. The function returns the number of hours it takes to get the moon while traveling at a speed of`x`

miles per hour. For your information:

elapsed time = distance / speed

- For your convenience the module defines the constant

DISTANCE_IN_MILES_TO_MOON = 238900.0

- Observation: the function makes a straight-forward calculation and returns the result.

- The output of its
*built-in*testing should be

h( 119.45 ) = 2000.0

h( 597.25 ) = 400.0

### Module calc.py

- Defines a function
`e()`

. The function has three parameters`x`

,`y`

, and`s`

. Parameters`x`

and`y`

are decimals; parameter`s`

is a string. If`s`

is either`'+'`

,`'-'`

,`'*'`

, or`'/`

', the function returns respectively`x + y`

,`x - y`

,`x * y`

, or`x / y`

. Otherwise, the functions`None`

.

- Observation: an
`if-elif-...else`

structure is needed to determine which of five possibile cases applies based on parameter`s`

. Knowing which case applies, allows a straight-forward calculation and then the immediate return of the calculation

- The output of its
*built-in*testing should be

19.5 + 5.25 = 24.75

12.5 - 6.5 = 6.0

12.5 * 4.5 = 56.25

10.0 / 2.25 = 4.444444444444445

1.0 @ 5.0 = None

### Module eval.py

- Defines a functions
`f()`

. The function has two list parameters`x`

and`y`

. The function returns a new list whose elements are the elements of`x`

followed by the elements of`y`

. The functionits list parameters.*does not change*

- Observation: an accumulator is needed. The elements of
`x`

need to be first added to the accumulator*followed by*the elements of`y`

. Afterwards, the accumulator is returned.

- The
*built-in*testing makes use of the following lists.

x1 = [ ]; y1 = [ ]

x2 = [ 3, 1, 4 ]; y2 = [ ]

x3 = [ ]; y3 = [2, 7, 8]

x4 = [ 3, 1, 4 ]; y4 = [1, 5, 1, 9]

- The output of its
*built-in*testing should be

f( x1, y1 ) = [ ]

f( x2, y2 ) = [ 3, 1, 4 ]

f( x3, y3 ) = [ 2, 7, 8 ]

f( x4, y4 ) = [ 3, 1, 4, 1, 5, 1, 9 ]

### Module uate.py

- Defines a function
`g()`

. The function has one list parameter`x`

. The function returns a new list whose elements are the element values of`x`

. The function*without duplication*its list parameter.*does not change*

- Observation: an accumulator is needed. The elements of
`x`

need to be added to the accumulator one-at-a-time if they are not already there. Afterwards, the accumulator is returned.

- The
*built-in*testing makes use of the following lists.

x1 = [ 0, 1, 2 ]

x2 = [ 0, 4, 1, 2, 2, 1, 3, 6, 3, 3, 4 ]

x3 = [ ]

- The output of its
*built-in*testing should be

g( x1 ) = [ 0, 1, 2 ]

g( x2 ) = [ 0, 4, 1, 2, 3, 6 ]

g( x3 ) = [ ]

### Module sigma.py

- Defines a function
`s()`

. The function has one parameter`d`

. Parameter`d`

is; that is, it is*an already initialized integer dataset*. The function returns the sum of the dataset values. The function*a list of integer lists*its list parameter.*does not change*

- Observation: an accumulator is needed to store the sum of the dataset values. The sum of the values for each row of the dataset needs to be added to the accumulator. Afterwards, the accumulator is returned.

- The
*built-in*testing makes use of the following lists.

d1 = [ [ 0 ], [ 1, 2 ], [ 1, 2, 3 ], [ 0 ] ]

d2 = [ [ 1, 0, 1, 2, 2 ], [ 3, 0, 1, 1, 1, 0 ], [ 2 ], [ 0, 0, 1 ] ]

d3 = [ [ 3, 0, 3], [ 3, 0, 3, 0, 1], [ 1, 0, 2 ] ]

d4 = [ ]

- The output of its
*built-in*testing should be

s( d1 ) = 9

s( d2 ) = 15

s( d3 ) = 16

s( d4 ) = 0

### Module trio.py

- Defines a function
`t()`

. The function has one list parameter`x`

of numeric values. The functionits list parameter. The function returns a new three-element list whose values are respectively the number of negative, zero, and positive values in*does not change*`x`

.

- Observation: three accumulators are needed to store the three wanted counts. Each element of the list needs to be examined to determine which count should be incremented based on its numeric property. Afterwards, the return is a
*list*of three elements (i.e, the computed counts).

- The
*built-in*testing makes use of the following lists.

x1 = [ 0, -3, 0, -4, -2 ]

x2 = [ -3, 1, -2, 1, -3, -3, -2, -4, -1, -4 ]

x3 = [ 2, -1, 0, 3, 0, 3, -2, -2, -1, -4, 3, -4, 3, -1, 3 ]

x4 = [ ]

- The output of its
*built-in*testing should be

t( x1 ) = [ 3, 2, 0 ]

t( x2 ) = [ 8, 0, 2 ]

t( x3 ) = [ 7, 2, 6 ]

t( x4 ) = [ 0, 0, 0 ]