## Assignment 23 — list manipulating functions

## Due Monday April 3

### Module aid.py

- Complete the implementation of three functions. Simple tester program abet.py is available to help you test your module
`aid`

functions.

- None of your functions should get input or print output.

- Examine and think about algorithms for the problems. However, do not write any code before class.

#### Function `rotate( x )`

list*Updates*`x`

by moving the last element of list`x`

(if any) to the beginning of list`x`

. This type of list transformation is often called a*circular shift*.

- In carrying out its action, the function neither returns a new list nor prints anything — it only modify the contents of list
`x`

in place (e.g., by list-modification methods like`pop()`

,`append()`

, and`insert()`

, or by directly modifying individual elements of list`x`

.

- The following code segment from abet.py demonstrates it usage.

x1 = []

x2 = [ 3 ]

x3 = [ 3, 1, 4, 1, 5, 9 ]

x4 = [ 'p', 'e', 'c', 'u', 'l', 'a', 't', 'i', 'o', 'n', 's' ]

aid.rotate( x1 ) ; print( x1 )

aid.rotate( x2 ) ; print( x2 )

aid.rotate( x3 ) ; print( x3 )

aid.rotate( x4 ) ; print( x4 )

- The segment produces as output:

[]

[3]

[9, 3, 1, 4, 1, 5]

['s', 'p', 'e', 'c', 'u', 'l', 'a', 't', 'i', 'o', 'n']

#### Function `rotate_k_times( x, k )`

list*Updates*`x`

by performing`k`

circular shifts.

- In carrying out its action, the function neither returns a new list nor prints anything — it only modify the contents of the list
`x`

in place. The following code segment from abet.py demonstrates it usage.

x1 = []

x2 = [ 3 ]

x3 = [ 3, 1, 4, 1, 5, 9 ]

x4 = [ 'p', 'e', 'c', 'u', 'l', 'a', 't', 'i', 'o', 'n', 's' ]

aid.rotate_k_times( x1, 2 ) ; print( x1 )

aid.rotate_k_times( x2, 3 ) ; print( x2 )

aid.rotate_k_times( x3, 4 ) ; print( x3 )

aid.rotate_k_times( x4 ,5 ) ; print( x4 )

- The segment produces as output:

[]

[3]

[4, 1, 5, 9, 3, 1]

['t', 'i', 'o', 'n', 's', 'p', 'e', 'c', 'u', 'l', 'a']

#### Function `common( x, y )`

a new list whose elements are those elements in*Returns*`x`

that are also in`y`

. The ordering of elements in the return list should reflect their ordering in`x`

.

- The function
parameters*does not modify*`x`

and`y`

in any way.

- The following code segment from abet.py demonstrates it usage.

x1 = [] ; y1 = []

x2 = [ 3 ] ; y2 = []

x3 = [ 1 ] ; y3 = [ 3, 1, 4 ]

x4 = [ 2, 7, 1, 8, 2, 8, 1, 8 ] ; y4 = [ 2, 8, 4, 5, 9, ]

z = aid.common( x1, y1 ) ; print( z )

z = aid.common( x2, y2 ) ; print( z )

z = aid.common( x3, y3 ) ; print( z )

z = aid.common( x4, y4 ) ; print( z )

- The segment produces as output:

[]

[]

[1]

[2, 8, 2, 8, 8]