After the lab, you should be proficient at
Copy /home/courses/cs111/handouts/lab7
and all of its contents, recursively, into your
labs
directory. This way, you don't have to
create the lab7
directory first. Otherwise,
you could first create the lab7
directory
and then copy all of the contents of
the /home/courses/cs111/handouts/lab7
directory (i.e., add a * to the cp command) into
your lab7
directory.
We'll practice writing several Python programs, each in their own text file. Name the files lab7.1.py through lab7.4.py.
Your programs will be graded on correctness, style, efficiency, and how well you tested them. Make sure you adhere to the good development and testing practices we discussed in class. Your code should be readable and your output should be useful and well-formatted.
After you've developed a correct solution to each program, restart
IDLE or close and reopen the IDLE "shell" by running the program again
(using F5), demonstrate that the program works using
several
speedingticket.py
, which
calculated a fine for speeding. Copy the program as
lab7.1.py
so that you have an easy reference to the
original solution. Then, define a function that takes as parameters
the speed limit and the clocked speed and returns the computed fine.
(What should the calculated fine be if the person wasn't
speeding?) The code that calls the function will print an
appropriate message based on the returned fine. Write an
appropriate comment for the function you defined.
Then, put the driver part of the program (i.e., the part that
gets input from the user, calls the function, and displays the
output) into a main
function.
Note that this is an example of refactoring, which is a common practice in coding. You write some code, test it, and then reorganize it so that it's better organized and easier to expand/maintain.
One function will handle the encoding. This function takes
as parameters a string and a key and returns the encoded
string. Modify your program to use this function. Put the
driver into a main
function. Test to
make sure the program is still working correctly.
Then, modify your program to have a function called
translateLetter
that takes as parameters a letter
and a key and returns the translated the letter. Call
the translateLetter
function in the encoding
function you just wrote.
Finally, write comments that compare the readability of the program before and after you added the functions.
2 12 4 14 6 16 8 18 10 20
Hint: what are the positions in the list for each displayed element? This is a warm-up for a later problem.
dealornodeal.py
contains the main
function and some additional functions to play the game Deal or No
Deal. For this problem, you will fill in the code for the
functions to make the game work correctly. You
should not modify the
main
function, and you should not modify
the function headers (i.e., don't modify the number of
parameters).
Note that the given program will not execute successfully.
First, you should read through the program and get an idea of how it works. For example, answer the following questions:
Tackle the functions in the following order, writing each one and then testing how far your program gets with each one.
readCaseValues(filename)
: read the amounts
contained in the cases from the file named by the parameter
filename
. The amounts are in a file, such as case_values.txt
or 7_million_cases.txt
(the files that you previously
copied into the directory deal_or_nodeal
) that
was defined as a constant at the top of the code. However, you don't
need to worry about that: you just need to use the filename
passed in as a parameter. Save the amounts in a list. (Note: what
are the data types of the amounts?) Look at the contents of the
files to help you figure out how to read in the values.printCasesLeft(cases)
: print the cases that
haven't been chosen, i.e., the cases that the player can select from.
So that the user can read all the cases easily, break them up in rows
of length 4, in formatted columns, such as
Cases Left to Choose from: 0 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
printBoard(amounts)
: print the amounts left
on the board in two columns. The amounts that have been opened
should still be on the board, just marked as having been chosen.
The left column should contain the smaller amounts. Example
output:
****************************** The Board: $ 0.01 ---- $ 1.00 $ 5000.00 $ 5.00 $ 10000.00 $ 10.00 $ 25000.00 ---- $ 50000.00 $ 50.00 $ 75000.00 $ 75.00 ---- $ 100.00 $ 200000.00 $ 200.00 ---- $ 300.00 ---- $ 400.00 $ 500000.00 $ 500.00 ---- $ 750.00 $1000000.00 ******************************
isValidChoice(cases, choice)
: return True iff the
choice is a valid choice (has not already been chosen and is a valid
case number)Advice: Don't worry about the formatting of output at first. Do a first pass implementation of all the functions, then go back and refine the functions.
Testing: You will need to run this program several times to make
sure it is working correctly--at least once the whole way through to
only two cases left. Test using both of the files in the
deal_or_nodeal
directory. You can add additional test
files.
Keep track of how much players are winning/losing in aggregate in a
file called payout.dat
. We'll consider the payout
to be the difference between the player's case and the deal made. If
the player does not make a deal, the payout is 0.
Read in the payout from the file. (Start the payout file at 0.) At the end of the game, print the new total payout to the file. Doing this part (reading/writing a file) will earn you 5 extra credit points.
After you've played the game approximately 10 times, you have a pretty good idea of the payouts. (Admittedly, the payout depends on luck and how good your player is.)
Then, try writing a modified offer function and comparing that payout to the other payout. Justify the modifications to the function in comments.
turnin
directory. (Review
the UNIX handout if you don't remember
how to do that.)labs/lab7
directory.
Verify that you have only the .py files you wrote (plus a
directory called deal_or_nodeal
).printLab.sh
command to create a file to print out.
You should probably print from the
labs
directory.Print the file using the lpr
command introduced in
the first lab.
Labs are due at the beginning of Friday's class. You should hand
in the printed copy at the beginning of class, and the electronic
version should be in the turnin
directory before 1:20
p.m. on Friday.
Ask well before the deadline if you need help turning in your assignment!