
Install Python from python.org on your computer, download the latest version, add python.exe to your system path, verify with python --version, and start writing your own scripts and programs.
Download and unzip the course resources, including starter files, completed files, and problem guides, then open the folder in your editor to code along.
Explore the Python print function through a homework-style exercise that prints one, two, and three messages with custom separators, including dollar signs, using sep and end.
Practice variables by storing hair color and shoe size in descriptive variables, then print their values. Override them to new values and print both in a single statement.
Explore strings as a non-primitive data type, use methods like upper, lower, title, and strip, and learn immutability, concatenation, and count and find operations.
Use the type function to verify data types and cast strings to integers with int, switching from concatenation to addition. Observe the type changes and the new sum.
Master the input function by building a program that asks for a name and age, title case the name, casts age to int, and prints the age in 15 years.
Discover Python string formatting options, from concatenation and print with multiple arguments to the format method with placeholders. Learn why f-strings offer readable, concise, and embedded expressions for future use.
Learn Python string formatting with f-strings by embedding name, age, height, and illness details. Build outputs for duration and temperature, such as 'Chicken pox lasts ten days and reaches 102.5°F'.
Create a rectangle calculator that asks for width and height, casts inputs to float, computes the area and perimeter, and displays results with formatted output.
Create a Python mph to meters per second converter that prompts for miles per hour, converts using 0.4474, rounds to two decimals, and prints a formatted result.
Build a temperature converter that takes Fahrenheit input, converts to Celsius and Kelvin, rounds results to four decimals, and displays a summary table using f-strings.
Build a Python letter counter app that asks for a name, a message, and a letter to count. Use lower and count to ensure case-insensitive counting, then show results.
Build a right triangle calculator that prompts for the base and height and computes the hypotenuse using the Pythagorean theorem. Calculate the area and round to three decimals.
Create a list of colors, print the list and the second and last colors using indexing, replace the first color with aqua via the assignment operator, and print list's length.
Learn how to modify Python lists by appending elements to the end and inserting items at specific indices, using mutable lists, with practical examples like colors, ages, and foods.
Master how to sort lists in Python by using temporary and permanent methods, including the sorted function, list.sort, and list.reverse, with attention to strings vs numbers and capitalization.
Build a favorite teacher survey using a list to collect ranked teachers. Learn to remove by index and by name, overwrite by index, and perform temporary and permanent sorts.
Build a grade sorter app that collects grades, converts them to integers, sorts from highest to lowest, drops the two lowest, and reports the remaining highest and lowest.
simulate a basketball roster using a Python list, assign positions to indices 0–4, collect players via input, display by position, handle injuries with pop and insert, and introduce control flow.
Learn python for loops by using numerical ranges to print 0–9 and 10–100 by tens, build a friends list from input, and compare range versus list iteration.
Explore for loops to sum ranges and iterables, and use sum, min, and max. Generate squares and cubes with range and exponentiation, then align results using zip.
Build a list of the first 20 powers of two using for loops, append each value, print the list, and print its sum to practice ranges and iterables.
Import the random library, generate five numbers from 1 to 100 with a for loop, create an animals list, print two random animals, print the list, and shuffle the list.
Solve quadratic equations with the C math library to handle real and complex roots, introducing complex numbers and guiding input of coefficients a, b, and c.
Build a Python password generator that creates multiple passwords of user-specified lengths using a rich character set (uppercase, lowercase, numbers, symbols) with random selection and nested loops.
Introduce boolean values as a primitive data type, show true and false results, and demonstrate boolean expressions with equality, not equals, comparisons, string checks, and in or not in lists.
Practice boolean values in Python by evaluating city string comparisons, validating a digit-only phone number with isdigit, and checking list membership for cars, including 'limo'.
Master multi-branch logic in Python by using if, elif, and else statements to chain conditions, with practical examples like age checks for gambling and drinking as the default case.
Master nested conditionals in Python by using startswith, for loops, and nested if statements. Practice with lists and booleans to control flow and generate dynamic messages.
Build a python coin toss simulator using random numbers to model heads or tails. Track counts and percentages, optionally show each flip, and flag equal heads and tails.
Design and implement rock paper scissors in Python using conditionals and randomness to play rounds, track scores, validate moves, and display results.
Create a game state dictionary with player name, level, experience points, health, ammo, and equipped weapon; print the state, then simulate firing to reduce ammo and gain 1500 experience points.
Master nested data structures by building dictionaries that hold lists and dictionaries, and learn to iterate with for loops and dict.items to access keys and values.
Build a Python morse code translator using a pre-defined dictionary mapping letters to morse symbols, clean user input, and translate messages into readable morse with separators.
Design and implement a dictionary-based database administrator program that handles user login, password validation, admin access to all accounts, and secure password changes with validation.
Model nested while loops with outer and inner loops controlling an Xbox on and gameplay. Use flag variables, user input, and random dreaming to illustrate sleep and dream cycles.
Explore modulo division by examining remainder, divisibility, including even/odd tests, and practical uses like wrapping indices in strings and lists, and simulating a spinning wheel.
Build an interactive Python program that uses modulo division to classify numbers as even or odd, and control the loop with a flag so it ends when the user quits.
Build a command-line hangman game in Python using while loops, random word selection, ascii art, and guess tracking to determine wins or losses.
Explore built-in Python functions by reading documentation and applying eval, pow, and dir through hands-on examples that evaluate string expressions, compute powers, reveal string and list attributes and methods.
Return values let functions send data back to the caller and store results for later use. Use return statements to pass lists and dictionaries between functions and compose complex workflows.
Explore how local and global scope control where variables exist. Learn how immutable data and return statements propagate changes back to global scope.
Explore mutable data in Python through a function that randomly selects and removes a winner from a list of six students, affecting return values and illustrating local and global scope.
Practice problem builds a python project that simulates opening fortune cookies, using functions to generate, store, and recap fortunes in a history list.
Explore a Python dice app built with functional programming, where you define functions to set dice sides and counts, roll dice, sum results, and optionally roll again.
Build a Python banking app that creates a bank account using a dictionary with name, savings, and checking balances, and supports deposits and withdrawals with balance checks.
Build a Python loan calculator that lets users input principal, interest rate, and desired monthly payment to compute interest, simulate monthly payments, and determine payoff time.
Build barbarian, rogue, and mage child classes that inherit from a generic character and implement one-hit kill moves, override declare, and simulate battles.
Explore inheritance by building a parent RC toy and a child RC car, including battery, a drive method that drains, and a charge battery function that restores the battery.
Create a Tamagotchi-like Python simulator with classes. Run a main loop, show values, present actions (eat, play, sleep, clean, forage, wake up), and update hunger, boredom, tiredness, dirtiness.
Design and implement a Yahtzee game in Python using object oriented programming, with classes for player and game, dice rolling, scorecard, and support for multiple players.
Build and test the Yahtzee game loop in project 8.3 Yahtzee part 2, using player and game classes, dice rolling, keeping dice, scorecard display, and score application.
Demonstrates debugging and implementing Yahtzee scoring with a scorecard dictionary to track dice rolling and scoring options such as number score, x of a kind, full house, straights, and chance.
Test and debug a finished Yahtzee game by running plays, exploring dice rolls, scoring categories like full house, straights, Yahtzee, and chance, and verify a working end-to-end gameplay.
Develop a Python casino blackjack project using object oriented programming, building card, deck, gambler, player, dealer, and game classes with shuffle, deal, display, and dealer rule methods.
Build and connect the casino blackjack game: define player and dealer as gambler subclasses, initialize hands, create and shuffle a deck, display money, and set bets.
Add a check continue playing method that ends the game if money is below minimum bet and asks to continue with Y or N, returning a boolean to control play.
Develop a Pokemon-inspired Python game using object-oriented programming, defining a base Pokemon class with fire, water, and grass subclasses, and a game engine to handle battles, moves, and starter selection.
Create a Pokemon style battle game using object oriented programming, implementing a turn-based loop, player and enemy moves, health, speed, fainting, and user input.
Wraps up a Python Pokemon battle game built with a base Pokemon class and fire, water, and grass subclasses, plus a battle engine for moves and stats.
Discover how to read from and write to text files in Python using open and with, in read, write, and append modes, keeping data as strings and preserving newlines.
Write and read text files by building a mood tracker that appends moods to moods.txt and then reads and prints all recorded moods to show persistence.
Create a json file with a list of game character dictionaries containing name, class, health, and level. Read the file back and print each key-value pair.
Define a student class with name, age, and grades, implement methods to compute the average, add a grade, and display a summary, using pickle to save and load the object.
Explore a command-line todo list manager built with the json library to load, display, add, complete, clear, and save tasks.
Build a menu-driven Python program that uses the json library to manage a contacts book (list of dictionaries), including load, display, add, search, edit, remove, clear, and save.
Learn to build a persistent role-playing game in Python by outlining key classes—character, mob, game, and file handler—and implementing save and load with pickle.
Build a Python text RPG in the Mob Crusher project, initializing a character with name, race, and dice-rolled HP, MP, strength, and speed, then battle mobs.
Explore a Python mob crusher project that tracks kill count, score, and loot, and uses pickle to save and load game state.
Hello, my name is Michael Eramo. I am an experienced educator, life long learner, and a self-taught programmer. I hold official Bachelor's Degrees in Music Industry, Education, and Physics, a Master's Degree in Mathematical Science, and a certificate in Software Development from Microsoft. While I owe my extensive knowledge base in Music, Physics, Mathematics, and Education to the many great educators I have worked with, my understanding of Computer Science is all my own.
I have never taken an "official" computer science course; I am completely self-taught. However, do not let that deter you from taking this course! Instead, let it motivate you that you too can learn anything you want to. Not only have I done it, but I've come to realize what works best for the self-taught programmer, and I have perfected the process!
See, I had this deep fear right after my son was born that I was done growing as an individual; that the person I was at 30 was going to be the same person I was at 55. I felt that there was literally ZERO time in the day to do anything other than go to work and be a dad. That is, until I bought a book on Computer Science, and a sense of wonder was woken. I've read countless books, watched hundreds of videos, and put in thousands of hours exploring and writing code. I would routinely wake up at 3:00 AM to learn for a few hours before I had to go to my full time job, teaching high school, before I went to my part time job of teaching college. Days were long, but getting up at 3:00 AM to read, to learn, or to code benefited me more than a few extra hours of sleep. It helped me realize that I was never done learning; never done growing. To me, that is what defines a life long learner.
I have years of classroom experience as a high school Physics teacher, Computer Science teacher, and college Mathematics professor. I am part of the New York State Master Teacher Program; a network of more than 800 outstanding public school teachers throughout the state who share a passion for their own STEM learning and for collaborating with colleagues to inspire the next generation of STEM leaders. Most importantly, I know what motivates people to learn on their own; to find a way to create time to learn, when there is no time to be had. I understand that time is valuable and that all learning should be engaging, meaningful, and have purpose.
Combining my expertise as an educator and my own personal interest in self-taught computer science led me to a telling realization; most educational material for the self-taught programmer is NOT EDUCATIONAL AT ALL. Instead, it falls into one of two categories:
Writing small "snippets" of programs that taken out of context, seem to serve no purpose at all and frankly, are beneath the user. Prime examples include using a for loop to print out all even numbers from 1 to 100 or using if statements to respond to generic user input. Here, users are bored and aren't challenge to create anything with meaning. There is little purpose other than gaining what is essentially factual level knowledge. It is a waste of your time.
Watching others code whole "applications" without a true understanding of what is going on. These are programs whose scope is beyond the user in which there is no clear guide to walk the user through the thought process without just giving them the answers. Here, without proper support and guidance, the user just defaults to letting someone else unfold the solution for them. There is little engagement in watching someone else work and rarely a thought generated on one's own. It is a waste of time.
Yes, I will admit that some learning does take place in doing simple tasks or watching others complete complicated tasks. In fact, much of how I learned was done this way. However, I'm telling you it pales in comparison to the learning that takes place by DOING meaningful and appropriately challenging work. This is the art of doing.
The art of doing is the art form of transforming oneself from a passive learner who watches, to one who sees the process of learning for what it truly is; a mechanism to better oneself. In "The Art of Doing", I have worked very hard to put together 40 meaningful, engaging, and purposeful "Challenge Problems" for you to solve.
Each challenge problem is differentiated for 3 levels of learning.
First, you are given a description of the program you are to create and example output. This allows users an opportunity to solve well defined problems that are meaningful and appropriate in scope. Here, all of the solution is user generated. It is engaged learning.
Second, you are given a comprehensive guide that will assist you in thought process needed to successfully code your program. This allows users appropriate assistance that tests their knowledge and forces them to generate the thoughts needed to solve the given problem. It is meaningful learning.
Third, you are given completed code, with comments, to highlight how to accomplish the end goal. This allows users to reference a working version of the program if they are stuck and cannot solve a portion of the problem without assistance. Rather than grow frustrated, the user can quickly reference this code to gain intellectual footing, and work back to solving the problem on their own. It is purposeful learning.
Engaging, meaningful, and with purpose. These challenge problems are vehicles that not only teach computer science, but teach you the art of doing. I guarantee that after completing them all you will consider yourself a life long learner and be proud to call yourself a self-taught programmer.