When Code Explains Code (And I Just Watch)

Day 4 of 100 Days Coding Challenge: Python

When code explains code, what will happen? Will that be interesting? I got curious. Today’s project? Build an AI-powered Code Explainer App in Python. For beginners. By a beginner. Using AI. What could possibly go wrong?

So here’s the thing: lately I’ve been Googling lines of Python like a tired detective chasing the same suspect down a dozen dark alleys. “What does this do?” “Why does nothing work?” “Is this syntax broken or am I?” Eventually, I had a minor revelation: if I already have Python open, why not make it explain itself? Like a moody teenager giving you their diary—with just enough sarcasm to sting.

Thus, the Code Explainer App was born. It’s part translator, part therapist, part mind-reader. A digital sidekick for all the times you stare at someone else’s code like it’s an ancient spell book and you forgot Latin.

Today’s Motivation / Challenge

The goal here wasn’t just to make another tool—it was to create something that helps me (and anyone else equally bewildered) learn faster. We all reach that moment where we copy and paste something, then realize we don’t understand half of it. This project turns that pain into progress by letting AI break down unfamiliar code, line by line, like a patient tutor who doesn’t judge you for asking the same question four different ways.

Purpose of the Code (Object)

This app takes a chunk of Python code, sends it to the OpenAI API, and asks the AI to explain each line in plain English. It’s a bridge between “What the heck is this?” and “Ohhhh, I get it now.” Paste the code in, press Enter, and receive a thoughtful explanation. Ideally. Unless something breaks. Which is also a learning experience.

AI Prompt:

Write a Python program that takes user input (a code snippet), sends it to OpenAI’s GPT model, and returns a line-by-line explanation. Use the post-1.0.0 version of the OpenAI Python library.

Functions & Features

  • Accepts multiple lines of Python code from the user
  • Sends the code to OpenAI’s GPT-3.5 or GPT-4 for explanation
  • Returns a readable, line-by-line breakdown
  • Keeps running until the user says “enough.”

Requirements / Setup

Python 3.10 or higher
OpenAI Python library (version 1.0.0 or higher):

pip install openai

Minimal Code Sample

import openai

client = openai.OpenAI(api_key=”your_key_here”)

response = client.chat.completions.create(

    model=”gpt-3.5-turbo”,

    messages=[{“role”: “user”, “content”: “Explain this code line by line:\n\n” + user_code}]

)

code_explainer

Sends user-submitted code to the OpenAI API and asks for an explanation.

Notes / Lessons Learned

I saved the API key in three different places: on my laptop, in a notebook, and possibly emotionally tattooed somewhere on my soul. Then I fired up the terminal and installed the OpenAI library, as if I knew what I was doing. The plan was simple: send a chunk of code to the API, get a clear explanation back, and ride off into the sunset with newfound knowledge.

First attempt? A glorious failure. The code just sat there, unimpressed, like a teacher who knows you didn’t do the reading. It turns out I was using the brand-new OpenAI library (post-1.0.0), but I was following instructions written when dinosaurs roamed Stack Overflow. Basically, I tried to plug a USB-C into a cassette player.

Once I switched to the correct syntax for the newer version, everything fell into place—and the AI started responding. So when code explains code, it was helpfu. Almost smugly.

Optional Ideas for Expansion

  • Add support for uploading .py files instead of pasting code.
  • Let users choose between a summary and a detailed explanation.s
  • Automatically save the explanation to a text file for future reference.

When Snow Is on the Schedule but Motivation Is on Hold

Brian’s fitness journal after a brain stroke

Last night, I made the mistake of checking the weather forecast. There it was in bold, unforgiving clarity: snow scheduled for today. I don’t mind running in the cold, but snow running? That’s where my enthusiasm politely exits the building.

This morning, the very first thing I did was rush to the window like a weather detective. No snow yet. Victory—for the moment. The temperature had dropped, though, and it was barely going to crawl past 40°F all day.

We’ve had a suspiciously mild autumn this year. Just recently, we enjoyed a 70-degree day. I think that spoiled me. Cold now feels rude. Still, I reminded myself: at least it’s not snowing. Our neighborhood is hilly, and I vividly remember my wife and I nearly slipping just walking up the hill in front of our house on a previous snow day. Ice plus gravity is not a friendly combination.

Had it been snowing, the day’s running plans would have been instantly canceled—no debate. But since the ground was still clear, I was forced to consider actually going out into the cold. I wasn’t thrilled, but I figured that after breakfast, it might be slightly more tolerable.

Meanwhile, my wife casually goes out for exercise at 5:00 a.m., when the temperature is even lower. I still don’t understand what kind of heroic software runs her internal system.

I, on the other hand, require mental push-ups just to step outside in cold weather.

After feeding both my kitten and myself, I consulted my weather app for the optimal escape window—only to be informed that snow was still very much expected. The app cheerfully announced it would start within the hour. In other words, science had just handed me a perfectly legitimate excuse to make my run short.

And I accepted it without protest.

The exercise journey, I’m learning, is full of negotiations—with weather, with the body, and especially with the mind. A decade ago, my resistance to running was far worse. Now the resistance is mostly emotional… but I still show up more often than not.

Even a little bit of exercise counts. Even showing up mentally counts. And looking ahead at the week, both Wednesday and Friday promise better running weather—so I’m choosing not to feel too guilty today.

Sometimes progress means running.
Sometimes it means strategically retreating from snow.

Both are survival skills.

I Built A Dictionary Apps, Words, API-Style

Day 3 of 100 Days Coding Challenge: Python

Today’s adventure is building a dictionary app using a free API. Sure, it’s the budget airline of dictionary apps—it may not get you into Oxford, but it can probably land a gig judging the middle school spelling bee.
Creating this app triggered a wave of linguistic nostalgia. I remembered my early days of learning English… and by “early,” I mean roughly the first twenty years. After nearly three decades in North America, I still get prepositions wrong—just with more confidence and the occasional dramatic flourish.
As for setup, I had to install the requests library. I couldn’t remember if I had it installed already or if I had just dreamed I did it one night in a caffeine-fueled coding fever dream. I installed it anyway, just to be safe—because nothing says “I’m a developer” like doubting your own system and doing it twice.

Today’s Motivation / Challenge

I wanted to create something that felt practical yet beginner-friendly. A dictionary app fits that sweet spot perfectly—it’s a great excuse to practice working with APIs, and it actually does something useful. Besides, I’ve always loved words. They’re like Lego pieces for thoughts, except when they come with silent letters and inconsistent plurals. That’s when they become Jenga.

Purpose of the Code (Object)

This program prompts the user to enter a word, then looks up its definition using an online dictionary API. It prints a simple explanation, giving the app the feel of a pocket dictionary—without the bent corners or the chance of being used as a coaster. The app runs in a loop, allowing users to look up multiple words at once, which makes it feel less like a one-trick pony and more like a low-budget tour guide to the English language.

AI Prompt


Write a Python program that asks the user to enter a word and uses an API to retrieve and display a simple definition. Let the user repeat this until they type “exit”.

Functions & Features

  • Accepts user input for a word to define
  • Connects to a free dictionary API to fetch the definition
  • Displays the first available definition in plain text
  • Loops so the user can define multiple words without restarting

Requirements / Setup

Python 3.10 or higher
Install the requests library: pip install requests

Minimal Code Sample

import requests
def get_definition(word):
url = f"https://api.dictionaryapi.dev/api/v2/entries/en/{word}"
response = requests.get(url)
return response.json()[0]["meanings"][0]["definitions"][0]["definition"]

This function takes a word, queries the dictionary API, and returns the first definition found.

dictionary_app

Notes / Lessons Learned

Initially, I had to restart the app every time I wanted to look up a new word. So I added a loop—because I’m that kind of person now. Look at me, looping like a full-grown coder. I even thought about adding pronunciation support, example sentences, or text-to-speech features… but then I blinked and lost all motivation. There’s always Day 4.
This “baby dictionary” does well with common words. Throw something obscure at it and it shrugs—politely. Still, it’s the kind of app I wish I’d had when I first arrived in North America, back when I thought “raining cats and dogs” was a warning to check for falling animals.

Optional Ideas for Expansion

  • Add pronunciation audio or phonetic spelling
  • Include example sentences to see the word in context
  • Integrate a text-to-speech library to read the definitions aloud

Rock, Paper, Terminal: The Showdown

Day 2 of 100 Days Coding Challenge: Python

Today’s goal: build a Rock-Paper-Scissors game. Because nothing screams “coding wizard in training” like trying to outsmart a random number generator in a game invented for kindergartners with sticky fingers and short attention spans.


The app pits the player against the computer in a glorious text-based battle of chance and ASCII art. I even added little touches, like printed symbols, to make it feel like a retro arcade game that had forgotten to include a joystick.

The last time I played with ASCII was back in 2024, when I coded a cat-themed game featuring a passive-aggressive feline as the final boss. I poured hours into it. My husband played it once, looked at me with deep concern, and asked, “Are you okay?” That was the moment I knew I’d crossed the threshold: I had become a programmer.

Today’s Motivation / Challenge

There’s something charmingly nostalgic about text-based games. They don’t rely on graphics or fancy libraries—just logic, timing, and the eternal struggle to remember whether paper beats rock or rock beats paper. It’s a perfect early project for getting used to input, conditionals, and letting the computer be your unpredictable opponent. Plus, it’s fun. And when you’re learning to code, fun is fuel.

Purpose of the Code (Object)

This program allows a human player to play Rock-Paper-Scissors against the computer. The player types in their choice, the computer picks one at random, and the program determines who wins. It loops until the user decides to stop, making it a great intro to control flow and user input. It’s the kind of project that makes programming feel like a game—because it is.

AI Prompt


Write a Python program that lets a user play Rock-Paper-Scissors against the computer. Include random choices and let the user play again. Bonus: Add ASCII art for each move.

Functions & Features

  • Accepts user input (rock, paper, or scissors)
  • Randomly selects the computer’s move
  • Compare choices and declare a winner
  • Loops until the player chooses to quit
  • Includes basic ASCII-style flair for fun

Requirements / Setup

Python 3.10 or higher
No external libraries required

Minimal Code Sample

import random
def get_computer_choice():
return random.choice(["rock", "paper", "scissors"])

Randomly picks the computer’s move each round.

Rock_Paper_Scissors

Notes / Lessons Learned

I dumped it into the same “to-do list” folder from yesterday, because apparently that’s now my one-size-fits-all app warehouse. Should I organize my files? Probably. Am I going to? Let’s not get ahead of ourselves.
With a bit of help from AI, I added a loop so the game doesn’t just play once and vanish like a magician with stage fright. Now it asks if you want to play again—because one round is never enough when you’re trying to prove you’re smarter than a CPU. And shockingly, I recognized pieces of the code. My brain hasn’t fully turned to digital oatmeal yet.
That said, I kept losing. Badly. I suspect that either the computer is cheating or the game gods are cursing me. My husband tried it and won instantly. So yes, the program works. I just don’t.

Optional Ideas for Expansion

  • Add a scoreboard that tracks wins, losses, and ties
  • Include emojis or better ASCII graphics to boost the drama
  • Introduce a “secret cheat code” that guarantees a win (for testing, of course)

Sunday Waffles Breakfast with Secret Jam

Brian’s fitness journal after a brain stroke

This morning, my wife asked me to make waffles. She had been drawing pancakes and suddenly decided she wanted to eat something fluffy. I, being a reasonable adult with access to a waffle maker, I accepted the mission.

So I woke up earlier than usual—early enough to sneak into the morning before my wife completed her full non-working-day routine. On her days off, she transforms into a productivity machine. One of her regular Sunday rituals is sorting ingredients for the entire upcoming week.

She plans a full weekly menu and pre-packs the ingredients into labeled bags. Monday’s bag equals Monday’s meal. It’s brilliant. It reduces waste, prevents impulse grocery shopping, and makes cooking so easy that even I rarely mess it up. The only problem? This operation completely occupies our very small kitchen.

So I waited.

Patiently.
Hungrily.
Strategically.

Once she completed her meal-kit assembly line and stepped away from the counter, I made my move and claimed the kitchen.

Our waffle maker is nearly two decades old and still performs beautifully, like a seasoned breakfast veteran. When we first moved to Tennessee, we made waffles almost every Sunday—until we realized that frequent waffles come with frequent weight gain. Since then, waffles have become a rare and highly celebrated event.

Today was one of those special days.

I sliced up some strawberries that were right at the edge of their peak deliciousness and made us two waffles each. Unfortunately, I had wildly miscalculated the strawberry-to-waffle ratio. Just as disaster loomed, my wife calmly produced a jar of strawberry jam she had made last spring—homemade, of course.

She’s created three varieties of strawberry jam in the past, including a spicy version. Sadly, I had already devoured all the spicy ones during the summer. What remained was the classic strawberry—and it saved breakfast.

After waffles and our weekly “fancy” coffee, the day drifted peacefully until lunchtime. As is now tradition, I offered to make my wife an omelet. She accepted immediately and requested two eggs instead of the usual one.

She’s been working hard on her strength training and trying to keep her protein intake high to protect her muscle mass. I took this as both a nutritional assignment and an honor.

It was one of those rare days with waffles, homemade jam, careful routines, and quiet teamwork in a small kitchen. Nothing dramatic. Nothing rushed.

Just a very pleasant Sunday.

The Great .py Awakening

Day 1 of 100 Days Coding Challenge: Python

The great .py Awakening

The Great .py Awakening is the moment I turned confusion into creation, proving that even the smallest script can spark a journey of growth and persistence.

Day one was like moving into a new apartment where all the furniture keeps slipping out the back door. I had to install everything from scratch—VS Code, Python, Git—and even go spelunking through my password manager to revive my long-lost GitHub account. Apparently, I once took a Python course and then dropped it, much like a bad Tinder date.
My first project? A to-do list app. Ironically, the one thing I should have built before I started this challenge. But instead of writing tasks, I dove straight into writing code—without knowing how to create a .py file. Up until now, I’d been tossing code into browser-based compilers like a hobbyist throwing spaghetti at a virtual wall.
Still, I did it. I made a real file—a real app. And despite a few “what even is a terminal?” moments, I now have a tiny program that adds, removes, and lists tasks. It’s basically productivity’s version of learning to boil water.

Today’s Motivation / Challenge

I wanted to start with something useful and immediately rewarding. A to-do list felt like the programming version of planting herbs on your kitchen windowsill—it’s simple, practical, and gives you an excuse to say, “Oh, this? I made it myself.” It also forced me to practice creating files, running scripts, and not panicking when my terminal asked me to press keys, as if it were judging my life choices.

Purpose of the Code (Object)

The app is a simple, command-line-based to-do list. It lets you add tasks, view your current list, and remove items you’ve completed or abandoned due to procrastination. All the tasks are saved in a text file, so you don’t lose them when you close the app—unless, of course, you delete the file, which I did. Twice.

AI Prompt


Create a simple Python to-do list app. It should let users add, view, and remove tasks. Store tasks in a text file so they persist between sessions.

Functions & Features

  • Add a task by typing it in
  • View all current tasks in a numbered list
  • Remove a task by selecting its number
  • All tasks are saved in a plain .txt file

Requirements / Setup

Python 3.10 or higher
No external packages required

Minimal Code Sample

def read_tasks():
with open("tasks.txt", "r") as file:
return file.read().splitlines()

Reads the tasks from a text file and returns them as a list—basic, but essential.

My-todo-list

Notes / Lessons Learned

I learned how to create folders, navigate directories, and use the cd command, as if I were starring in a low-budget ‘90s hacker movie. I even managed to connect Codex to GitHub… eventually. It felt less like a setup process and more like a professional wrestling match with invisible tech gremlins.
The most surprisingly difficult part? Figuring out how to push my code to GitHub. The last time I used Git was in 2023, and apparently, I’d flushed all that knowledge from my brain to make room for banana bread recipes and TV quotes. But guess what? My first to-do list app actually worked! A little too well—it zipped through the prompts faster than I could respond. Honestly, I’ll probably go back to using Google Calendar and Gemini for actual task management, but the app exists, it runs, and it’s up on GitHub like a proud toddler drawing taped to the fridge.

Optional Ideas for Expansion

  • Add due dates or time reminders to each task
  • Color-code tasks by urgency (for a future GUI version)
  • Let users mark tasks as “done” instead of just deleting them