@extends('template')
@section('title')
Lab 8: Extra Exercises
@stop
@section('content')
These are extra exercises that you can work on if you've got extra time
at the end of the lab. Write your code in a file named `extra.py`.
## `writeReport`
Partner A
`writeReport` should have two parameters: a list of tuples which each
consist of a string followed by a number, and a string which is a
filename. It should open the target file, erase any old contents (this
happens automatically if you open in write mode) and write out the
strings and numbers from the report, one pair per line. The string should
come first, then a colon, then a space, and then the number. So for
example, if you call:
```py
writeReport(
[("titanium", 4.507), ("iron", 7.874), ("copper", 8.96)],
"metals.txt"
)
```
Then the file 'metals.txt' should contain the following text:
```txt
titanium: 4.507
iron: 7.874
copper: 8.96
```
## `readReport`
Partner B
`readReport` does the opposite of `writeReport`: it reads data from a
file into a list of tuples. It should accept one argument, which is a
filename, and it must read information from that filename and return a
list of tuples, each consisting of a string followed by a number. The
format in the file will be the same as the format shown in `writeReport`:
a string, then a colon followed by a space, and finally the associated
number. If you already got `writeReport` working using the test above,
then calling:
```py
readReport("metals.txt")
```
should **return** the following value:
```py
[("titanium", 4.507), ("iron", 7.874), ("copper", 8.96)]
```
Hint: you can use [the `.split` method](/reference/methods/#.split) of
strings with an argument to specify what character or sequence of
characters should be the split point. For this part, using `": "` as the
split point is quite efficient.
## `swapFiles`
Partner A
`swapFiles` should take two filenames as arguments, and it should swap
the contents of the files. This is not too hard, but it's a bit more
challenging than it might seem at first :)
## `listEvents`
Partner B
`listEvents` should take a single argument which is a string naming a
file to read data from. It should read data from that file specifying
calendar events, and then print out a listing of each event in a modified
format.
The `events.txt` and `events2.txt` files each have data which lists
events as three comma-separated fields: an event name, a start time in
hour:minute format, and a duration as a floating-point number of hours.
The start times use hours in a 24-hour format, so 3 p.m. would be listed
as 15. If `listEvents` is called like this:
```py
listEvents("events.txt")
```
the table it prints should look like this:
```txt
CS 111 (9:30-10:30)
Major advising (11:00-12:00)
Department meeting (12:30-1:30)
Research time (15:30-17:00)
Home with baby (18:00-6:30)
```
Note that even after you've figured out how to extract information from
the file and convert it to numbers, you will have to do some math to
convert the duration-in-hours into an end-time... one strategy is to
first convert the number of hours and minutes into a
time-in-fractional-hours and then convert that back to hours-and-minutes
afterwards.
@include('/labs/lab08/_toc')
@stop