This task is part of project01 which is due at 23:00 EST on 2025-01-28.
You have the option to work with a partner on this task if you wish. Working with a partner requires more work to coordinate schedules, but if you work together and make sure that you are both understanding the code you write, you will make progress faster and learn more.
You can download the starter code for this task using this link.
You can submit this task using this link.
Put all of your work for this task into the file
mathPractice.py
(which is provided among the starter files)
It is rarely the case that code works the first time you test it. It often contains one or more so-called bugs that cause it to behave incorrectly. Accordingly, much of the time you spend programming in the course will involve debugging, which is the process of finding and removing bugs.
Here's a simple example of a program that does not behave as expected:
username = input('What is your name? ') # line 1
print('Hello, username') # line 2
n = input('Enter an integer n: ') # line 3
print('n is', n, '; 2*n is', 2*n) # line 4
For example:
What is your name? Wendy Hello, username Enter an integer n: 23 n is 23 ; 2*n is 2323
(Important Note: In this pset, we use blue text to highlight text entered by the user to distinguish it from text printed by the program, which is in black. When you actually run the program in Thonny, the text entered by the user will also appear in blue.)
This program misbehaves in two ways:
Wendy
in this case),
it always displays the string username
.n
for the expression 2*n
(46
in this case) it shows the digits repeated twice ("2323"
in
this case).The first bug is due to the fact that in line 2, the occurrence of username
inside the printed string denotes the literal string U-S-E-R-N-A-M-E and
not the value of the variable named username
. This can be fixed by
changing line 2 to be
print('Hello, ' + username) # fixed line 2, version 1, for 1st bug
or
print('Hello,', username) # fixed line 2, version 2, for 1st bug
The second bug occurs because in the expresion 2*n
the value of n
is the
string of digits entered by the user (e.g., the 2-digit string "23"
)
rather than the integer 23
. This can be fixed by using the int()
function to convert the string of digits "23"
to the integer 23
. One way to
apply this fix is to change line 4 to be:
print('n is', n, '; 2*n is', 2*int(n)) # fixed line 4 for 2nd bug
Alternatively, we could leave line 4 unchanged, and instead change line 3 to be
n = int(input('Enter an integer n: ')) # fixed line 3 for 2nd bug.
With either combination of fixes, the program now works as expected:
What is your name? Wendy Hello, Wendy Enter an integer n: 23 n is 23 ; 2*n is 46
This example illustrates that (1) even a very short program can contain multiple bugs and (2) often there is more than one way to fix a bug.
print
Most examples involving print
that you
have seen in the course up to this point involve calling it with a single
parenthesized argument that's a string. For example, suppose that:
i
is a variable holding the integer 42
f
is a variable holding the floating point number 6.023
s
is a variable holding the string "bunny"
Then:
print('i is ' + str(i) + '; f is ' + str(f) + '; s is ' + s)
displays the characters
i is 42; f is 6.023; s is bunny
However, it turns out that the print
function in Python is special in two ways:
print
can accept any number of arguments.
Each argument to print
is automatically converted to a string, and spaces
are automatically inserted between them.
For example:
print('i is', i, '; f is', f, '; s is', s)
will also displays the characters
i is 42; f is 6.023; s is bunny
Passing multiple arguments with arbitrary types to print
is often more
convenient that having to convert the values to strings and concatenating them
into one big string.
mathPractice.py
ProgramFor task 1, we will work with a Python program that quizzes the user on basic math operations (although it does not check their answers). This program is supposed behave as shown in the first and second examples below, where text highlighted in blue is entered by the user.
If you open the file mathPractice.py
(which is included in the starter
code for ps01
) in Thonny, you will see an attempted implementation of
this program.
Unfortunately, this example code has numerous bugs that prevent it from working properly. Your goal in this subtask is to fix the program so that it behaves as indicated by the above examples.
You should modify mathPractice.py
by finding and fixing all the bugs it
contains, so that ultimately it has the correct behavior as shown by the
examples. You may find it useful to make comment every time you fix a bug
so that you can more easily review you progress against the rubric.
Most changes require modifying/replacing existing lines in the program. It is never necessary to completely remove any lines from the program. It is not necessary to add any new lines to the program (although you might need to change a blank line).
You should use an incremental strategy for debugging. This means that, at every step, you should focus on the first line of the program that is incorrect (i.e., either it prints the wrong output or the program generates an error at that line). Then attempt to fix this line, and test your modified program to see if it improves the behavior of the program. If your bug fix doesn't work, try again. If it does work, focus on the next broken line. Keep doing this until the behavior is correct.
Thonny's assistant feature will give you tips about any errors that happen while running the code, as well as helping to point you at lines that may have bugs. But it does not always identify the best way to fix a bug, and sometimes an issue it identifies is actually caused by a problem that occurs earlier in the program. Try to really understand the cause of each problem before unthinkingly making changes.
There are some bugs in the program that don't cause it to crash with an error message, and which Thonny's assistant cannot detect. Make sure you actually check whether the output looks correct in addition to fixing any errors and warnings that Thonny displays. If you want to check your output carefully, you can use this free difference checker website to compare the example outputs above with what your code actually produces and highlight any differences.
Testing the program is time-consuming because you have to type in your
values over and over again. This is not required, but if you want
to test things more thoroughly, we have provided a file named
test_mathPractice.py
as part of the starter code. When you run this
file, you should see two lines of ouptut in red that look like this:
txt
✓ test_mathPractice.py:20
✓ test_mathPractice.py:51
(You may see different specific filenames.) After those two lines,
you should see the output of the program, with 10 selected for each
input. However, you may not see those messages if there are still
bugs in your program! This test file runs your mathPractice.py
file
three times. The first two times it checks the results (and will tell
you about any differences it finds) using the same inputs as the
exmaples shown here. The third time, it uses custom inputs defined in
the file, but it does not know how to check the results, so it just
prints them out. You can edit test_mathPractice.py
to change the
num1
and num2
variables near the bottom of the file in order to
run the last test with different numbers, but you will still have to
inspect it manually to see if it's correct or not.
Example #1
An example of exactly what the output should be if the user enters the numbers 15 and 7. Note that the other inputs after the first two don't affect the output at all, so they don't matter.
In []:Prints%run mathPractice.py
Let's practice some math! Enter an integer between 1 and 20: 15 Enter another integer between 1 and 20: 7 The numbers you entered are 15 and 7 The larger number is 15 The smaller number is 7 These bars show how big they are: =============== ======= [Addition] What is 15+7 ? 22 [Addition] The answer is: 22 [Subtraction] What is 15-7 ? 8 [Subtraction] The answer is: 8 [Multiplication] What is 15*7 ? 90 [Multiplication] The answer is: 105 [Division] What is 15/7 (rounded to an integer)? 2 [Division] The answer is: 2 [Remainder] What is the remainder of 15/7 ? I don't know. [Remainder] The answer is: 1
Example #2
An example of exactly what the output should be if the user enters the numbers 12 and 3. This uses more creative input values to demonstrate that the input from the user after the first two numbers is ignored.
In []:Prints%run mathPractice.py
Let's practice some math! Enter an integer between 1 and 20: 12 Enter another integer between 1 and 20: 3 The numbers you entered are 12 and 3 The larger number is 12 The smaller number is 3 These bars show how big they are: ============ === [Addition] What is 12+3 ? 15 [Addition] The answer is: 15 [Subtraction] What is 12-3 ? Nine [Subtraction] The answer is: 9 [Multiplication] What is 12*3 ? 36 [Multiplication] The answer is: 36 [Division] What is 12/3 (rounded to an integer)? Four [Division] The answer is: 4 [Remainder] What is the remainder of 12/3 ? nothing [Remainder] The answer is: 0
SyntaxError
prompt
variables.int
in exactly two places.
int
function in exactly two places.