Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5af3a58578 |
@@ -1,2 +1,35 @@
|
||||
# 013-debugging
|
||||
|
||||
Day 13 of Udemy's *100 Days of Code: Python Pro Bootcamp*: finding and fixing
|
||||
bugs in Python code.
|
||||
|
||||
All exercises live in [`src/main.py`](src/main.py), each commented out with the
|
||||
fix noted beside it. Uncomment one at a time to run it.
|
||||
|
||||
## Exercises
|
||||
|
||||
| Exercise | Bug | Fix |
|
||||
| --- | --- | --- |
|
||||
| Describe the Problem | `range(1, 20)` never reaches 20, because the upper bound is excluded | Use `range(1, 21)` |
|
||||
| Reproduce the Bug | `dice_imgs[dice_num]` raises `IndexError` when the roll is 6 | Index with `dice_num - 1` |
|
||||
| Play Computer | A birth year of exactly 1994 matches no branch | Use `>=` in the `elif` |
|
||||
| Fix the Errors | `input()` returns a string, so `age > 18` fails; the `print` is not indented | Convert with `int()`; indent the `print` |
|
||||
| Print is Your Friend | `==` compares instead of assigning, so `word_per_page` stays 0 | Use `=` |
|
||||
| Use a Debugger | `b_list.append(new_item)` sits outside the loop, so only the last item is kept | Indent it into the loop |
|
||||
|
||||
## Debugging approach
|
||||
|
||||
1. Describe the problem in your own words.
|
||||
2. Reproduce the bug.
|
||||
3. Play computer: step through the code by hand.
|
||||
4. Fix the errors the interpreter reports.
|
||||
5. Use `print()` to inspect values.
|
||||
6. Use a debugger to step through execution.
|
||||
|
||||
## Running
|
||||
|
||||
Requires Python 3.
|
||||
|
||||
```bash
|
||||
python src/main.py
|
||||
```
|
||||
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
############DEBUGGING#####################
|
||||
|
||||
# Describe Problem
|
||||
# Answer: Range never reach 20 as range don't include 20. Only up to
|
||||
# def my_function():
|
||||
# for i in range(1, 20):
|
||||
# if i == 20:
|
||||
# print("You got it")
|
||||
# my_function()
|
||||
|
||||
# # Reproduce the Bug
|
||||
# from random import randint
|
||||
# dice_imgs = ["❶", "❷", "❸", "❹", "❺", "❻"]
|
||||
# dice_num = randint(1, 6)
|
||||
# # print(dice_imgs[dice_num]) # list index out of range
|
||||
# print(dice_imgs[dice_num - 1]) # The corrected code
|
||||
|
||||
# # Play Computer
|
||||
# year = int(input("What's your year of birth?"))
|
||||
# if year > 1980 and year < 1994:
|
||||
# print("You are a millenial.")
|
||||
# # elif year > 1994:
|
||||
# elif year >= 1994: # Answer corrected code (other solution, change the other if line)
|
||||
# print("You are a Gen Z.")
|
||||
|
||||
# # Fix the Errors
|
||||
# # age = input("How old are you?")
|
||||
# age = int(input("How old are you?")) # Answer: convert input to int
|
||||
# if age > 18:
|
||||
# print("You can drive at age {age}.")
|
||||
|
||||
# #Print is Your Friend
|
||||
# pages = 0
|
||||
# word_per_page = 0
|
||||
# pages = int(input("Number of pages: "))
|
||||
# # word_per_page == int(input("Number of words per page: "))
|
||||
# word_per_page = int(input("Number of words per page: ")) # Answer
|
||||
# total_words = pages * word_per_page
|
||||
# print(total_words)
|
||||
|
||||
# # Use a Debugger
|
||||
# def mutate(a_list):
|
||||
# b_list = []
|
||||
# for item in a_list:
|
||||
# new_item = item * 2
|
||||
# b_list.append(new_item) # Answer: indent code
|
||||
# # b_list.append(new_item)
|
||||
# print(b_list)
|
||||
#
|
||||
#
|
||||
# mutate([1, 2, 3, 5, 8, 13])
|
||||
Reference in New Issue
Block a user