# Programming with Python: Additional Exercises

A collection of exercises that have been either removed from or not (yet) added to the main lesson.

## Swapping the contents of variables (5 min)

Explain what the overall effect of this code is:

``````left = 'L'
right = 'R'

temp = left
left = right
right = temp
``````

Compare it to:

``````left, right = [right, left]
``````

Do they always do the same thing? Which do you find easier to read?

## Solution

Both examples exchange the values of `left` and `right`:

``````print(left, right)
``````
``````R L
``````

In the first case we used a temporary variable `temp` to keep the value of `left` before we overwrite it with the value of `right`. In the second case, `right` and `left` are packed into a list and then unpacked into `left` and `right`.

## Fixing and Testing

From: “Defensive Programming”

Fix `range_overlap`. Re-run `test_range_overlap` after each change you make.

## Solution

``````def range_overlap(ranges):
'''Return common overlap among a set of [left, right] ranges.'''
if not ranges:
# ranges is None or an empty list
return None
max_left, min_right = ranges
for (left, right) in ranges[1:]:
max_left = max(max_left, left)
min_right = min(min_right, right)
if max_left >= min_right:  # no overlap
return None
return (max_left, min_right)
``````