Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions ai-debugging/README.md
Original file line number Diff line number Diff line change
@@ -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/)
Empty file.
32 changes: 32 additions & 0 deletions ai-debugging/alien_pet_care/__main__.py
Original file line number Diff line number Diff line change
@@ -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()
30 changes: 30 additions & 0 deletions ai-debugging/alien_pet_care/pet.py
Original file line number Diff line number Diff line change
@@ -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..."
Empty file added ai-debugging/tests/__init__.py
Empty file.
44 changes: 44 additions & 0 deletions ai-debugging/tests/test_pet.py
Original file line number Diff line number Diff line change
@@ -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
Loading