echo $title ?>
Goals
After the lab, you should be proficient at
- using and defining functions within your program
- refactoring your code to use functions
Objective: Review
Review the slides for today.
Objective: Set Up
Run runHelpClient &
As usual, create a directory for the programs and output you develop in this lab.
Copy all the .py
files
in /csdept/courses/cs111/handouts/lab4/
into
your lab4
directory.
Objective: Programming in Python
We'll practice writing several Python programs, each in their own text file. Name the files lab4.1.py, lab4.2.py, etc.
Your programs will be graded on correctness, efficiency, style, 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, close reopen the IDLE "shell" by running the program again (using F5), demonstrate that the program works using several good test cases, and save the output to a file named lab4.x.out, where x is the problem number.
- (20) Let's start by getting you comfortable with calling
functions that have been defined within the same file.
Open
lab4.1.py
. Read through the functions and their documentation. Then, modify themain
function such that it implements what is described in its comments, e.g., draws and moves bugs, using functions defined within the program.There will be no saved output for this program.
- (15 pts) Let's try turning code that you wrote before into a
function, so that we're focused on defining functions rather than
writing new code.
Copy your
lab3/lab3.5.py
file into this directory aslab4.2.py
. Refactor your code such that the code that displays the first 20 Fibonacci numbers is in a function calleddisplayFibonacciSequence
. Follow the instructions to refactor your code from the in-class handout (e.g., putting the rest of your code in amain
function and calling themain()
function at the bottom of your program, writing an appropriate comment for your function). Yourmain
function will likely be quite short. - (20 pts) Now let's try writing a function that returns
something and programmatically testing that function.
Copy your last program and name it
lab4.3.py
Now, modify the functiondisplayFibonacciSequence
so that it takes as a parameter the number of the Fibonacci sequence (which must be greater than 2) to generate and returns that number. Name the modified functiongenerateFibonacciNumber
and update the documentation accordingly.To help make the desired functionality clear, the following test case should pass:
test.testEqual( generateFibonacciNumber(6), 5 )
Write a test function that tests that your function works correctly.
Modify the
main
function to prompt a user for which Fibonacci number they want and then display that Fibonacci number.A sample run is shown below:
This program computes Fibonacci numbers. Which Fibonacci number are you looking for (larger than 1)? 6 The Fibonacci number at position 6 in the sequence is 5
(The output is a little awkward. We don't have a good way of saying the "6th" number vs the "1st" number, etc.)
- (20) We haven't been making clear the importance of reusable
functions because all of the functions we have defined have been
used only within the same program.
- Open
game.py
. This file is the start of our owngame
module that we will use in subsequent labs. - Implement the function
rollDie
. You may need to review therandom
module. - Test the function using the
testRollDie
function. - In comments at the top of the program (below the
high-level description), answer the following
questions: Why can't we just
use
test.testEqual
to test this function? Why can I write a function that tests your code without knowing how your function is implemented? - Implement the function
rollMultipleDice
, using another function that you implemented. - Uncomment the call to the
function
testRollMultipleDice
- Save the output from executing both
the
testRollDie
andtestRollMultipleDice
(in one run).
We are not ready yet to use this module yet, but we will soon. Hopefully, it will not be hard to imagine how this module could be used to write other programs.
- Open
- (25 pts) [From Zelle, Chapter 3, Problem 3] Write a program that
determines the total molecular weight of a molecule based on the
number of hydrogen, carbon, and oxygen atoms it contains. You
should use the following weights:
Atom Weight
(g/mol)H 1.0079 C 12.011 O 15.9994 Note that your program should use constants for the molecular weights of carbon, hydrogen, and oxygen. (Recall what the conventions are for naming constants. Why does it make sense to make these values constants?)
Your program should define a function that takes as parameters the number of hydrogen, carbon, and oxygen atoms and returns the weight of the molecule.
Test the above function using the
testEqual
function, in a function.After verifying that your function works, create a
main
function. Your program should prompt the user for the number of atoms of each type and display the total weight with the appropriate units, rounded to 3 decimal places.A sample run is shown below:
This program computes the molecular weight for a molecule. Enter number of Hydrogen atoms: 3 Enter number of Carbon atoms: 2 Enter number of Oxygen atoms: 1 Weight of molecule is 43.045 g/mol
- IDLE and jEdit may create backup files with the "~" extension. Delete these files from your lab directory to save paper when you print.
- Submit your lab4 directory into
your
turnin
directory. - Before printing, move
graphics.py
out of yourcs111/lab4
directory; otherwise, the print out will be too long. (Check out themv
command.) You can move that file back into yourlab4
directory after you've printed. If you have a filegraphics.pyc
(by accidentally running using Python2 instead of Python3), you should delete that file before printing. In other words, you should only have the .py files you wrote, the .out files you created, and a__pycache__
directory in your directory when you print. (The latter is not printed.) - Create the printable lab assignment, using the
createPrintableLab
command:
createPrintableLab <labdirname> - View your file using the
evince
command. - Print the file using
the
lpr
command. - Log out of your machine when you are done.
- Python programs: 100 pts; see above for breakdown
Finishing up: What to turn in for this lab
Perform the following steps from
your cs111
directory.
Note that each command
below links to a page with more information about using the
command.
You should hand in the printed copy and submit the electronic version before the beginning of Friday's class.