diff --git a/README.md b/README.md index 002510f..de8fb06 100644 --- a/README.md +++ b/README.md @@ -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 +``` diff --git a/src/main.py b/src/main.py new file mode 100644 index 0000000..fbc71c8 --- /dev/null +++ b/src/main.py @@ -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])