Python

2026

Python in 30 Days Day 4

Day four was more string work. It was focused on manipulating strings and doing some built in methods to build some analytics.

Challenge:

You’re processing user-submitted restaurant reviews. Real user input is messy — inconsistent casing, extra spaces, typos in structure. Write a program that:

  1. Starts with this list of raw reviews exactly as given:
raw_reviews = [
    "  great burger, loved it! ",
    "FRIES WERE COLD. bad experience. ",
    "  the milkshake was amazing. will return.",
    "salad was okay. nothing special.   ",
    "BROWNIE IS A MUST TRY!!  "
]    
  1. Writes a function clean_review(review) that:
  • Strips leading/trailing whitespace
  • Converts to sentence case (first letter capitalized, rest lowercase — look up which method does this in one step)
  • Returns the cleaned string
  1. Uses a list comprehension to apply clean_review to every review, storing results in cleaned_reviews
  2. Writes a function analyze_reviews(reviews) that returns a dictionary containing:
  • "total": count of reviews
  • "positive": count of reviews containing words like “great”, “amazing”, “loved”, “must”, “will return”
  • "avg_length": average character length of the reviews (rounded to nearest whole number)
  1. Prints the cleaned reviews and the analysis dictionary cleanly

Things to figure out: how to check if any of several words appear in a string, and how to calculate an average from a list.

Read more →

Python in 30 Days - Day 3

Day three was all about list comprehension, or manipulating lists in a concise manner. The main concept is that what would normally take a typical for loop to accomplish can be done in a single line. This appiles to lists, dictionaries, and tuples.

The Challenge:

Using your restaurant system from day two as a base, write the following using list comprehensions — no standard for loops allowed for these:

Read more →

Python in 30 Days - Day 2

Day two was all about dictionaries, which have always been a real struggle for me. I’ve been told by many people that they’ve also struggled with them in the past, so at least I know I’m not alone.

The Challenge:

You’re building a simple restaurant order sytem.

Write code that:

  1. Creates a dictionary of menu items with their prices (at least 5 items)
  2. Creates an empty list called order
  3. Writes a function add_item(order, item_name, menu) that:
  • Adds the item to the order list if it exists in the menu
  • Prints a warning if the item isn’t on the menu
  1. Writes a function get_total(order, menu) that returns the total cost of everything in the order
  2. Adds at least 3 items to the order (try adding one that doesn’t exist)
  3. Prints the final order list and the total, formatted cleanly

My Code:

menu = {
    'Burger': 15,
    'Fries': 5,
    'Milkshake': 9,
    'Salad': 6,
    'Brownie': 3
}

order = []
total = 0


def add_item(order, item_name, menu):
    if item_name in menu:
        order.append(item_name)
        print(f"Added {item_name} to order.")
    else:
        print(f"Sorry, {item_name} is not on the menu!")

           

def get_total(order, menu):
    total = 0
    for i in order:
        price = menu[i]
        total += price
    
    
    return total

add_item(order, 'Burger', menu)
add_item(order, 'Pizza', menu)
add_item(order, 'Fries', menu)
add_item(order, 'Milkshake', menu)

bill = get_total(order, menu)


print("\nYour order:\n")
print(*order, sep="\n")
print(f"\nTotal: ${bill}")

The results of running the code are:

Read more →

Python in 30 Days - Day 1

It’s been a while since I’ve heavily invested time into learning Python and I thought I’d do a refresher course, using Claude AI to help guide mea s an experiment. I decided to have Claude quiz me on what I know already in ten questions and build a 30 day course from there.

I passed the ten questions with flying colors and Claude said that my theoretical knowledge is excellent, so it suggested we get straight into functions and scope for day one.

Read more →

2025

Decorators in Python

Python Decorators

Decorators are a way we can use higher order functions to modify other functions. Typically they are used to wrap a function with another function.


def hello(name="Ian"):
    def greeting(func):
        def wrapper(*args, **kwargs):
            print("A man is sitting at the bar, you go up and greet him.")

            if name == "Ian":
                print("My name is Ian, what's yours?")
            else:
                print(f"My name is {name}, what's yours?")

            print("The man glances your way momentarily, then moves to the other end of the bar.")
            result = func(*args, **kwargs)
            return result
        return wrapper
    return greeting

@hello("Alice")
def bar_talk():
    print("You start a conversation about the weather with the bartender instead.")

@hello()
def another_chat():
    print("You shrug your shoulders and ask the bartender about the local sports team.")


print("=== First Interaction ===")
bar_talk()

print("\n=== Second Interaction ===")
another_chat()

In the example above, you would get the following print out:

Read more →

Functions

What Are Functions?

Functions are blocks of code that perform a given task any time they are called.

A function could process one action a single time and move on to the next block of code in the script, or it could iterate through itself multiple times (infinitely if you wrote it that way).

In Python, your declare a function with the reserved keyword def - which defines the function.

Read more →

Types in Python

Type()

In Python you can check for what type of variable you are dealing with by using the type() formula. It takes one input and tells you what type of variable it is.

See below:

>>> num = 3
>>> num_str = "3"
>>> bool = True
>>> num_float = 3.0
>>> type(num)
<class 'int'>
>>> type(num_str)
<class 'str'>
>>> type(bool)
<class 'bool'>
>>> type(num_float)
<class 'float'>

In the example above, we see that the function returns what class the variable belongs to. This can be very useful if you are trying to debug existing code that has variables written somewhere other than where you are looking or trying to fix the bug.

Read more →

Pure Functions

Pure Functions

Pure functions are functions that return the same result every time, assuming they receive the same inputs. This is made possible by writing the function to be self-contained, meaning it doesn’t rely on variables outside it’s local scope.

Pure functions do not change the external state of the program. They are great for keeping clean code that is easy to debug, but you can’t write an entire program of pure functions, because it wouldn’t actually do anything.

Read more →

Variables

What Are Variables?

If you are brand new to coding, the term variables might not immediately register. It’s important to understand what a variable is, as most coding languages do use them.

So What Are Variables?

Variables are containers that store values, such as:

Numbers:

  • Integers (3)
  • Float (3.0)
  • String (“3”)

Text:

  • Strings are plain text and are wrapped in parenthesis to tell Python to interpret the text as text only. “For example, this would be a string”

Boolean:

Read more →

Hello, World!

Your First Bit of Code

Everyone starts with the first program that was ever ran on a computer with a visual interface:

Hello, World!

The purpose of the program is to tell the Python interperter to show “Hello World” on the screen.

Go to your terminal and type the following to check for Python:

python3 --version

If you get an error, be sure to install it. On MacOS, I recommend HomeBrew, but you can use your package installer of choice. For HomeBrew, do the following:

Read more →