To start this lab, download this zip file.

# Lab 17 - Indexing

**IMPORTANT**

Before doing Unit 4 assignments, please update `byu-pytest-utils`

(again).

```
conda activate cs110
pip install -U byu-pytest-utils
```

You should see that `byu-pytest-utils`

version `0.3.3`

is now installed.

Version `0.3.2`

was required for Unit 3. For Unit 4 you’ll need version `0.3.3`

.

## Activities

`squares.py`

Write a function `squares(length)`

that creates a list of `length`

where each position of the list is equal to its index squared.

For example:

`squares(5)`

Would return:

`[0, 1, 4, 9, 16]`

**Remember:** Use double asterisks `**`

to perform the exponential function (eg. `5**2 = 25`

)

`factorial.py`

Write a function `factorial(x)`

that computes `x!`

.

**Remember**: the factorial is defined as $x! = x \cdot (x - 1) \cdot (x - 2) \cdot \ldots \cdot 1$

For example:

`factorial(4)`

Would return:

`24`

Since `4! = 4 * 3 * 2 * 1 = 24`

`odd_indices.py`

Write a function `odd_indices(list_of_numbers)`

that returns a list of the indices in `list_of_numbers`

that contain an odd number.

For example:

`odd_indices([2,1,8,7,9])`

Would return:
`[1,3,4]`

Since 1,7,9 are odd and in positions 1,3,4 respectively.

*Remember that indexing starts at zero*

`wrap_list.py`

Write a function `wrap_list(list, length)`

that “wraps” or repeats the items in `list`

over and over until it’s length is `length`

.

For example:

`wrap_list([1, 2, 3, 4], 11)`

Would return:

`[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3]`

`even_positions.py`

Write a function `even_positions(list)`

that takes the items in the even positions of `list`

and returns them in a new list.

For example:

`even_positions(["cat", "dog", "goat", "cow", "horse"])`

Would return:

`["cat", "goat", "horse"]`

**Note:** position 0 counts as even

`zip_around.py`

Write a function `zip_around(list1, list2)`

that functions like zip(list1, list2) but instead of truncating the longer list to the length of the shorter list, wrap the shorter list around to the beginning.

For example:

`zip_around([1, 2, 3], [1, 2, 3, 4, 5])`

Would return:

`[(1, 1), (2, 2), (3, 3), (1, 4), (2, 5)]`

## Grading

Activity | Points |
---|---|

`squares.py` | 6 |

`factorial.py` | 6 |

`odd_indices.py` | 6 |

`wrap_list.py` | 6 |

`even_positions.py` | 6 |

`zip_around.py` | 6 |