Exercise 03 comprises three small Python programs you will complete the implementation of:
- A good vibes fortune cookie
- A little logical puzzle
Each of the three programs is somewhat more involved than the last. Start early!
0. Pull the skeleton code
You will find the starter files needed by “pulling” from the course workspace repository. Before beginning, be sure to:
- Be sure you are in your course workspace. Open the file explorer and you should see your work for the course. If you do not, open your course workspace through File > Open Recent.
- Open the Source Control View by clicking the 3-node (circles) graph (connected by lines) icon in your sidebar or opening the command palatte and searching for Source Control.
- Click the Ellipses in the Source Control pane and select “Pull” from the drop-down menu. This will begin the pulling process from the course repository. It should silently succeed.
- Return to the File Explorer pane and open the
exercises
directory. You should see it now contains another directory namedex03
. If you expand that directory, you should see the starter files for the two Python programs in this exercise.
If the above did not work, try the following:
- Click the Ellipses in the Source Control pane and select “Pull, Push” from the drop-down menu. Then select “Pull from”. Then select “upstream” and the
main
option. This will begin the pulling process from the course repository. It should silently succeed. - Return to the File Explorer pane and open the
exercises
directory. You should see it now contains another directory namedex03
. If you expand that directory, you should see the starter files for the two Python programs in this exercise
Part 1. Fortune Cookie
After pulling the skeleton code, above, you can find the starter code for Fortune Cookie in the file exercises/ex03/fortune_cookie.py
.
Your program is expected to print three lines. The first line of output must be the message Your fortune cookie says...
. The second line of output is random and will be discussed further following the example. The third line of output must be the message Now, go spread positive vibes!
. An example of running this program a few times is shown below.
$ python -m exercises.ex03.fortune_cookie
Your fortune cookie says...
A beautiful, smart, and loving person will be coming into your life.
Now, go spread positive vibes!
$ python -m exercises.ex03.fortune_cookie
Your fortune cookie says...
Your life will be happy and peaceful.
Now, go spread positive vibes!
$ python -m exercises.ex03.fortune_cookie
Your fortune cookie says...
Soon life will become more interesting.
Now, go spread positive vibes!
Randomization
Python has a standard random
library for producing pseudo-random numbers, which is great for our purposes. In the skeleton code, we have already imported a function named randint
for you from the random
library. You can use this function to generate a random int
value within some range of possible numbers. You can play around with randint
by starting an interactive Python REPL and importing it as shown in the skeleton code:
$ python
Python 3.9.1 (tags/v3.9.1:1e5d33e, Dec 7 2020, 17:08:21) [MSC v.1927 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from random import randint
>>> print(randint(1, 10))
8
>>> print(randint(50, 100))
76
>>> print(randint(1, 2))
1
>>> print(randint(1, 2))
2
>>> type(randint(1, 10))
<class 'int'>
>>> quit()
The numbers your examples produce will be random and different from the example shown above. Notice the randint
function takes two input arguments, both int
expressions separated by a comma, and evaluates to a single int
value that is a random int
between and inclusive of the two input arguments.
Since the evaluation of a call to randint
is an int
, you can use a variable declaration and assignment statement in your program to store the randomized result. Then, using that variable and nested if/else
conditional statements, you should print one of at least four messages at random.
You can choose any random fortune messages you would like for your program!
Requirements
For full credit on this part of the assignment, beyond the requirements the autograder scores, you must:
- Only make one call to
randint
and store the result in a variable - Use nested
if/else
conditional statements withinelse
blocks to control which fortune is printed. In other words, do not use four linear, unrelatedif
statements. For an example of this, consider modifying the number guessing game example from lecture 3.
Part 2. Tar Heel Arithmetic
The next program involves a small logical and arithmetic puzzle. The starter code is found in tar_heels.py
. You should prompt
the user for an integer and respond with the following logic:
- When evenly divisible by 2, print “TAR”.
- When evenly divisible by 7, print “HEELS”.
- When evenly divisible by both 2 and 7, print “TAR HEELS” instead of just “TAR” or “HEELS”
- When none of the above conditions are met, print “CAROLINA”
Consider the following demo:
$ python -m exercises.ex03.tar_heels
Enter an int: 5
CAROLINA
$ python -m exercises.ex03.tar_heels
Enter an int: 8
TAR
$ python -m exercises.ex03.tar_heels
Enter an int: 21
HEELS
$ python -m exercises.ex03.tar_heels
Enter an int: 28
TAR HEELS
Hints:
- Consider how making use of the arithmetic remainder operator and the equality operator can allow you to write a boolean expression to determine whether an integer is evenly divisible by some number or not.
- You will need to think carefully about the ordering of your logic, boolean operators, and the rules of
if/else
statements in order to successfully implement the required logic.
4. Make a Backup Checkpoint “Commit”
As you make progress on this exercise, making backups is encouraged. Note that you do not have to make a backup in order to submit your work, though you are encouraged to before each submission so that you can revert back to a previous point in your project if you accidentally change something you did not intend to.
- Open the Source Control panel (Command Palette: “Show SCM” or click the icon with three circles and lines on the activity panel).
- Notice the files listed under Changes. These are files you’ve made modifications to since your last backup.
- Move your mouse’s cursor over the word Changes and notice the + symbol that appears. Click that plus symbol to add all changes to the next backup. You will now see the files listed under “Staged Changes”.
- If you do not want to backup all changed files, you can select them individually. For this course you’re encouraged to back everything up.
- In the Message box, give a brief description of what you’ve changed and are backing up. This will help you find a specific backup (called a “commit”) if needed. In this case a message such as, “Progress on Exercise 3” will suffice.
- Press the Check icon to make a Commit (a version) of your work.
- Finally, press the Ellipses icon (…), look for “Pull/Push” submenu, and select “Push to…”, and in the dropdown select your backup repository.
5. Submit to Gradescope for Grading
Login to Gradescope and select the assignment named “EX03 - Conditionals”. You’ll see an area to upload a zip file. To produce a zip file for autograding, return back to Visual Studio Code.
If you do not see a Terminal at the bottom of your screen, open the Command Palette and search for “View: Toggle Integrated Terminal”.
To produce a zip file for ex03
, type the following command (all on a single line):
python -m tools.submission exercises/ex03
In the file explorer pane, look to find the zip file named “21.mm.dd-hh.mm-exercises-ex03.zip”. The “mm”, “dd”, and so on, are timestamps with the current month, day, hour, minute. If you right click on this file and select “Reveal in File Explorer” on Windows or “Reveal in Finder” on Mac, the zip file’s location on your computer will open. Upload this file to Gradescope to submit your work for this exercise.
Autograding will take a few moments to complete. For this exercise there will be points manually graded for style – using meaningful variable names and snake_case. If there are issues reported, you are encouraged to try and resolve them and resubmit. If for any reason you aren’t receiving full credit and aren’t sure what to try next, come give us a visit in office hours!