Skip to content

Commit 06a79fc

Browse files
committed
Sample code for: How to Debug Python Code With an AI Agent
1 parent 3ec52ca commit 06a79fc

6 files changed

Lines changed: 109 additions & 0 deletions

File tree

ai-debugging/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# How to Debug Python Code With an AI Agent
2+
3+
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/)

ai-debugging/alien_pet_care/__init__.py

Whitespace-only changes.
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import time
2+
3+
from alien_pet_care.pet import AlienPet
4+
5+
6+
def main():
7+
print("--- Welcome to the Alien Pet Incubator ---")
8+
pet = AlienPet(name="Zorg")
9+
10+
print(f"Initializing care routine for {pet.name}...")
11+
time.sleep(0.5)
12+
13+
for i in range(12):
14+
pet.feed()
15+
pet.rest()
16+
beam = "=" * (i + 1)
17+
print(
18+
f"\r🛸 {beam}> 👾 Feeding & Resting... (Cycle {i + 1}/12)",
19+
end="",
20+
flush=True,
21+
)
22+
time.sleep(0.15)
23+
24+
print("\n\n--- Final Stats ---")
25+
print(f"Pet Name: {pet.name}")
26+
print(f"Fed Level: {pet.fed_level} / 10")
27+
print(f"Rested Level: {pet.rested_level} / 10")
28+
print(f"Current Status: {pet.get_status()}")
29+
30+
31+
if __name__ == "__main__":
32+
main()

ai-debugging/alien_pet_care/pet.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
class AlienPet:
2+
def __init__(self, name):
3+
self.name = name
4+
self.fed_level = 0
5+
self.rested_level = 0
6+
self.MAX_STATUS = 10
7+
8+
def feed(self):
9+
"""Increments the feeding level."""
10+
if self.fed_level < self.MAX_STATUS:
11+
self.fed_level += 1
12+
13+
def rest(self):
14+
"""Increments the rested level."""
15+
if self.rested_level < self.MAX_STATUS:
16+
self.rested_level += 1
17+
18+
def is_happy(self) -> bool:
19+
"""The pet is genuinely happy only when fully fed and rested."""
20+
return (
21+
self.fed_level == self.MAX_STATUS
22+
and self.rested_level == self.MAX_STATUS
23+
)
24+
25+
def get_status(self) -> str:
26+
if self.is_happy():
27+
return "🛸 Happy and thriving!"
28+
if self.fed_level < 5:
29+
return "👾 Starving! Please feed me."
30+
return "Doing okay, but still feels a bit empty..."

ai-debugging/tests/__init__.py

Whitespace-only changes.

ai-debugging/tests/test_pet.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import pytest
2+
3+
from alien_pet_care.pet import AlienPet
4+
5+
6+
@pytest.fixture
7+
def pet():
8+
return AlienPet("Zorg")
9+
10+
11+
@pytest.mark.parametrize("times, expected", [(1, 1), (10, 10), (15, 10)])
12+
def test_feed_caps_at_max(pet, times, expected):
13+
for _ in range(times):
14+
pet.feed()
15+
assert pet.fed_level == expected
16+
17+
18+
@pytest.mark.parametrize("times, expected", [(1, 1), (10, 10), (15, 10)])
19+
def test_rest_caps_at_max(pet, times, expected):
20+
for _ in range(times):
21+
pet.rest()
22+
assert pet.rested_level == expected
23+
24+
25+
@pytest.mark.parametrize(
26+
"fed, rested, expected",
27+
[(10, 10, True), (9, 10, False), (10, 9, False)],
28+
)
29+
def test_is_happy(pet, fed, rested, expected):
30+
pet.fed_level, pet.rested_level = fed, rested
31+
assert pet.is_happy() is expected
32+
33+
34+
@pytest.mark.parametrize(
35+
"fed, rested, expected",
36+
[
37+
(10, 10, "🛸 Happy and thriving!"),
38+
(4, 0, "👾 Starving! Please feed me."),
39+
(5, 0, "Doing okay, but still feels a bit empty..."),
40+
],
41+
)
42+
def test_get_status(pet, fed, rested, expected):
43+
pet.fed_level, pet.rested_level = fed, rested
44+
assert pet.get_status() == expected

0 commit comments

Comments
 (0)