From 06a79fcb9cbb9dcbaca7a52d1c8b90bbbd92a827 Mon Sep 17 00:00:00 2001 From: Leodanis Pozo Ramos Date: Tue, 14 Jul 2026 15:27:37 +0000 Subject: [PATCH] Sample code for: How to Debug Python Code With an AI Agent --- ai-debugging/README.md | 3 ++ ai-debugging/alien_pet_care/__init__.py | 0 ai-debugging/alien_pet_care/__main__.py | 32 ++++++++++++++++++ ai-debugging/alien_pet_care/pet.py | 30 +++++++++++++++++ ai-debugging/tests/__init__.py | 0 ai-debugging/tests/test_pet.py | 44 +++++++++++++++++++++++++ 6 files changed, 109 insertions(+) create mode 100644 ai-debugging/README.md create mode 100644 ai-debugging/alien_pet_care/__init__.py create mode 100644 ai-debugging/alien_pet_care/__main__.py create mode 100644 ai-debugging/alien_pet_care/pet.py create mode 100644 ai-debugging/tests/__init__.py create mode 100644 ai-debugging/tests/test_pet.py diff --git a/ai-debugging/README.md b/ai-debugging/README.md new file mode 100644 index 0000000000..ddc79e00d5 --- /dev/null +++ b/ai-debugging/README.md @@ -0,0 +1,3 @@ +# How to Debug Python Code With an AI Agent + +This folder provides the code examples for the Real Python tutorial [How to Debug Python Code With an AI Agent](https://realpython.com/ai-debugging/) diff --git a/ai-debugging/alien_pet_care/__init__.py b/ai-debugging/alien_pet_care/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ai-debugging/alien_pet_care/__main__.py b/ai-debugging/alien_pet_care/__main__.py new file mode 100644 index 0000000000..875edbeb8b --- /dev/null +++ b/ai-debugging/alien_pet_care/__main__.py @@ -0,0 +1,32 @@ +import time + +from alien_pet_care.pet import AlienPet + + +def main(): + print("--- Welcome to the Alien Pet Incubator ---") + pet = AlienPet(name="Zorg") + + print(f"Initializing care routine for {pet.name}...") + time.sleep(0.5) + + for i in range(12): + pet.feed() + pet.rest() + beam = "=" * (i + 1) + print( + f"\ršŸ›ø {beam}> šŸ‘¾ Feeding & Resting... (Cycle {i + 1}/12)", + end="", + flush=True, + ) + time.sleep(0.15) + + print("\n\n--- Final Stats ---") + print(f"Pet Name: {pet.name}") + print(f"Fed Level: {pet.fed_level} / 10") + print(f"Rested Level: {pet.rested_level} / 10") + print(f"Current Status: {pet.get_status()}") + + +if __name__ == "__main__": + main() diff --git a/ai-debugging/alien_pet_care/pet.py b/ai-debugging/alien_pet_care/pet.py new file mode 100644 index 0000000000..379ccc35b3 --- /dev/null +++ b/ai-debugging/alien_pet_care/pet.py @@ -0,0 +1,30 @@ +class AlienPet: + def __init__(self, name): + self.name = name + self.fed_level = 0 + self.rested_level = 0 + self.MAX_STATUS = 10 + + def feed(self): + """Increments the feeding level.""" + if self.fed_level < self.MAX_STATUS: + self.fed_level += 1 + + def rest(self): + """Increments the rested level.""" + if self.rested_level < self.MAX_STATUS: + self.rested_level += 1 + + def is_happy(self) -> bool: + """The pet is genuinely happy only when fully fed and rested.""" + return ( + self.fed_level == self.MAX_STATUS + and self.rested_level == self.MAX_STATUS + ) + + def get_status(self) -> str: + if self.is_happy(): + return "šŸ›ø Happy and thriving!" + if self.fed_level < 5: + return "šŸ‘¾ Starving! Please feed me." + return "Doing okay, but still feels a bit empty..." diff --git a/ai-debugging/tests/__init__.py b/ai-debugging/tests/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ai-debugging/tests/test_pet.py b/ai-debugging/tests/test_pet.py new file mode 100644 index 0000000000..df1c97f8a4 --- /dev/null +++ b/ai-debugging/tests/test_pet.py @@ -0,0 +1,44 @@ +import pytest + +from alien_pet_care.pet import AlienPet + + +@pytest.fixture +def pet(): + return AlienPet("Zorg") + + +@pytest.mark.parametrize("times, expected", [(1, 1), (10, 10), (15, 10)]) +def test_feed_caps_at_max(pet, times, expected): + for _ in range(times): + pet.feed() + assert pet.fed_level == expected + + +@pytest.mark.parametrize("times, expected", [(1, 1), (10, 10), (15, 10)]) +def test_rest_caps_at_max(pet, times, expected): + for _ in range(times): + pet.rest() + assert pet.rested_level == expected + + +@pytest.mark.parametrize( + "fed, rested, expected", + [(10, 10, True), (9, 10, False), (10, 9, False)], +) +def test_is_happy(pet, fed, rested, expected): + pet.fed_level, pet.rested_level = fed, rested + assert pet.is_happy() is expected + + +@pytest.mark.parametrize( + "fed, rested, expected", + [ + (10, 10, "šŸ›ø Happy and thriving!"), + (4, 0, "šŸ‘¾ Starving! Please feed me."), + (5, 0, "Doing okay, but still feels a bit empty..."), + ], +) +def test_get_status(pet, fed, rested, expected): + pet.fed_level, pet.rested_level = fed, rested + assert pet.get_status() == expected