
Discover why coding is fun and suitable for beginners, with an engaging, no-edit teaching style that explains why things work and teaches Python quickly.
Master Python fundamentals through a visual, turtle module-based approach that uses graphics as a learning tool, with the option to study standalone or alongside the Python Tail.
Installing the Software
If you already have a setup to code in Python that you're happy with, keep it. Don't let anyone tell you "You should use this editor and this configuration to code". Find what you're comfortable with.
But if you're new to coding, then you can follow these steps to install Python and an editor. I'll use PyCharm in my videos, so you can use the same software if you don't already have a preferred editor.
Install Python
First, you'll need to install Python, the language.
Go to the main Python website (link in resources)
Hover on the Downloads tab and click the button to install Python. This link will download the latest version, which is the one you want to use.
Once the download is complete, run the installer. You can choose all the default options when you're asked any question during installation.
You don't need to run anything. As long as Python is installed on your computer, you can move on to the next download and installation.
Install PyCharm Community Edition
The language is not enough. You need an editor to write code and manage your projects. Although Python comes with a basic editor, I'll recommend you use one of the standard IDEs (Integrated Development Environment)—that's a fancy word for an all-in-one software for your coding.
Go to the PyCharm download page (link in resources)
There are two versions of PyCharm on this page. Don't choose the more prominent one, the Professional Edition, since this required a paid license. Instead, scroll down to get PyCharm Community Edition, which is free and more than enough for your current.
Once the download is complete, run the installer. You can again choose all the default options when you're asked any question during installation.
Once you've installed PyCharm, launch it, again choosing the default options during any set up steps presented to you.
Create a New Project. A project is a folder with all the files that belong together. I recommend you create a single project for all the lessons we'll work on in this course. Don't create a project for each lesson!
You'll be asked to choose your Interpreter. PyCharm wants to know how you want Python set up. Go with the defaults again. This will create something called a Virtual Environment (don't worry about what this is for now) using the version of Python you have just installed. In future, you may have more than one version of Python installed on your computer and you can use different ones for different projects.
And you're in! Now, From the File menu, choose New... (not the menu item that says New Project, since you're already created a project, but the one the simply says New...)
From the window that comes up, choose Python File (not the option that just says File)
If you don't see any options in the little window that pops up on your screen, make sure your project/folder is selected in the Project sidebar on the left (you may need to open the sidebar first) and then try again.
Name your file anything you want, and you're ready to code
Launch a Python project in PyCharm, import the turtle module, and create a turtle named Fred to draw graphics, while learning that coding is stepwise communication.
Discover how Python creates a turtle object named Fred from the turtle module, call forward and left with distance, note that command order matters, and keep window open with turtle.done.
Explore how turtle objects, strings, and integers become Python objects, and learn how quotes, variables, and simple commands like right and forward create visible output.
Create two named turtles, Fred and Mary, using the turtle module, set their shapes and colors, and program them to move away from each other continuously forever.
Illustrate how to use a while true loop in Python to move Fred and Mary step by step, forever, with indentation and the dry principle guiding repetition.
Explore how a while loop repeats a block of code with indentation and a colon, and learn to print the turtle's x score using a value variable with parentheses.
Use if statements in Python to let a program decide what to do, checking Fred's x position and stopping the loop at 100, with indentation and printing to show results.
Explore how to use a Python interactive console to experiment with variables and data types. Learn about int, float, string (str), and bool, and why imports like turtle are necessary.
Explore Python variable assignment, the equals equals operator, and booleans; learn how interactive output differs from scripts and apply if statements with comparisons like greater than or equal to.
Explore variables as data labels and booleans like true. Use a while loop controlled by carry on to stop Fred and Mary when Fred reaches 100, then print the end.
Control flow in Python using if/else inside a while loop to decide actions and print outcomes, then end animation when either Fred reaches 100 or Mary reaches -100 using or.
Import turtle, race Fred and Mary in a while loop with a boolean flag, replace hard coded numbers with variables, and add random speeds to expose a stop condition bug.
Identify and fix a bug in the turtle race by using a greater than or equal to finish line check, ensuring the loop stops when a turtle crosses the finish.
Review the Fred and Mary project, tidy code with comments, and explore importing the turtle and random modules, using random.randint, controlling the while loop, and if statements.
Learn three ways to stop a Python while loop: boolean conditions, an infinite loop with break, and end conditions from relational expressions, with booleans and print statements shown.
Discover how to use the turtle module to write on screen with adjustable font, size, style, and color, while following file naming rules to avoid module name clashes.
Explore Python fundamentals through visual graphics with turtle, examining store, repeat, decide, and reuse as the four pillars of programs.
Draw a starry night using the turtle module, placing stars as sized dots at random positions while managing pen up and pen down for clean movement.
Learn to use python's standard library, including turtle and random, to place stars at random x and y coordinates between -200 and 200 using randint.
Learn how to create 150 stars by using a Python for loop to move a turtle to random x and y coordinates and draw dots.
Create a starry night scene with turtle graphics by setting a black background, white stars, and placing them with random integers across the screen edges, using window width and height.
Use the turtle screen tracer and update to control when drawings appear on the screen, letting you show the final output instantly instead of every step.
Finish the starry night animation by randomizing star sizes for varied brightness, separate turtles for stars and the crescent moon, and adapt the display with setup width and height.
Monty explains a room analogy to visualize how a Python program stores values in labeled boxes, uses a built-in booklet for functions like print, and handles errors.
Explore how Monty the turtle models Python concepts: built-in functions, boxes for variables, and importing modules like turtle, with naming and reassignment illustrating references.
Explore how to store many turtle objects in a single Python list, using square brackets and zero-based indexing to access items.
Create a many turtles list and append turtles to it. Reference each turtle by its 0-based index, then move, turn, or set position.
Learn to manage multiple turtle objects in Python by naming them, listing them, and using a for loop with range to orient each turtle differently.
Explore refactoring Python turtle code to rename variables, assign shapes and colors, and use rgb colors; loop through a list of turtles with for turtle in turtles to move them.
Set up a dark mode turtle screen, lift pens, and create eighty turtles screensaver that moves in unison using a while loop with per frame updates and edge bounce logic.
Explore lists in Python using square brackets to create lists, index items including negative indices and the last item, and use slicing with start:stop and optional step to extract sublists.
Explore list fundamentals in Python by creating heterogeneous lists, indexing items, and using methods like append, index, remove, and pop to manage data and nested lists.
This extra chapter consolidates chapters one and two by building a visual bouncing tennis ball animation with Python's turtle module.
Move the turtle by updating its current y (and x) position with offsets instead of turning, using the heading and coordinates to bounce off edges.
Learn to animate a ball dropping vertically by updating its y position with a velocity affected by gravity, using pixels per frame inside an infinite loop.
Create a visual Python turtle animation with an infinite loop and tracer(0), using an if statement to detect ground contact and bounce the ball by inverting velocity against gravity.
Watch the ball lose energy on every bounce by multiplying velocity with an energy retained factor, causing decreasing height, while debugging why the ball sometimes disappears.
Diagnose the disappearing ball bug by printing its position and velocity, then fix the floor level by adding a floor position check to keep it at floor level.
Discover how to use f-strings, a formatted string method, to print ball position and velocity with placeholders in curly braces and optional format specifiers for two decimal places.
Add horizontal velocity to a falling ball in turtle graphics, decompose motion into x and y components, and refactor velocity names with a code-aware rename tool, then add walls.
Follow how a bouncing ball interacts with left and right walls within a looping animation, applying gravity and reversing velocity on hits.
Turn one bouncing ball into ten by storing balls in a list, using a for loop to populate them, and moving each ball, with a preview of independent velocities.
Attach per-object velocity properties to turtle objects, assign random x and y velocities, and color balls with RGB while randomizing positions, enabling a bouncing ball simulation.
Learn how to create and reuse your own functions in Python while building a turtle game that bursts bubbles, reappears randomly, and uses a timer to challenge you.
Discover how python functions power actions like print and rand int, explore function versus method, lowercase naming, and defining your own functions while building the turtle chasing those bubbles game.
Use the turtle module to set up a 700-pixel square window, create a player turtle, and outline the game steps by describing it aloud to a friend.
Plan and implement a turtle game by creating a moving player with forward motion and left-right steering, handle random bubbles, and detect hits to burst them within a game loop.
Define a Python turn_left function with def, a colon, and indentation, print status, change the turtle color, and call it on keyboard input in a graphics-based program.
Bind a function to a keyboard key in a turtle graphics program using on key press and listen, linking turn left and turn right to left and right arrow keys.
Learn how turtle functions work in Python, distinguishing referring to a function from calling it with parentheses using turn left as an example. Explore RGB color modes and values.
Bind the left and right keys to turn the turtle, then implement a four-edge teleport using set X and set Y. Use tracer and the game loop to update movement.
Turn the teleporting code into a function and pass any turtle as a parameter, improving readability and enabling reuse for multiple turtles.
Explore Python execution with the Monty room analogy, the red booklet, and the turtle module to illustrate variables, imports, and functions, and how defining and calling a function runs code.
In a Python turtle game, a bubble turtle appears at random positions and reappears after being hit, using a reusable move_bubble(xpos, ypos) function to move and redraw.
This lesson guides building a bubble bursting game in python with turtle by defining move, bubble, teleport, and collision logic using distance checks, random positions, and clear between hits.
Add a timer and score to a turtle game by using time.time() to track start time, compute elapsed and time left, and display a countdown in the window title.
Learn to implement a countdown-based game loop in Python by refactoring from a time-left expression to a dedicated time_left variable, and handle common errors while updating the game state.
Bind space to start the game and wait for your press. Create run_game, start the timer on space, show the first bubble, and run three attempts with a high score.
Create a start_challenge function to run the game three times using a loop, pause three seconds between runs, and reset the background color between games, while introducing high score tracking.
Explore how local variables stay inside a function's scope and are local to the function, and how returning values brings results back to the main program, making functions self-contained.
Master how local variables in run game are returned to the caller to carry the score into star challenge and update the high score.
Add six moving bubbles that move downward and reappear after bursting using teleportation. Harmonize code to manage multiple bubbles, place them at start, and adjust start and score logic.
Create multiple bubbles in a Python turtle program using a bubbles list, a for loop, and move logic to pop bubbles and increase the score.
Move multiple bubbles downward and have them reappear at the top using a game loop and a for loop, with bubble speed and teleport logic.
Explore storing data in Python by examining basic types including integer, float, string, boolean, plus turtle as a data type, and review lists, dictionaries, defining functions, and control flow.
Explore data type categories by identifying iterables and sequences, and learn how for loops and indexing reveal how lists, strings, and other structures are iterable or ordered.
Learn how mutable and immutable data types behave in python, with lists that mutate via assignment, append, or pop, and strings that stay unchanged and produce new objects.
Explore tuples as immutable data structures in Python, distinct from lists, created with parentheses or with comma separation, and used as iterable sequences.
Discover dictionaries, Python's mapping data structure that links keys to values for storing player names and points. See mutability, key-based lookup, and common methods like keys, values, and items.
Learn to group turtles by color, select three red, green, and blue turtles, and move each color as a unit using turtle graphics concepts and screen setup.
Explore on click by binding a function to window on click that accepts two arguments, x and y, as the mechanism passes click coordinates to the function.
Introduce a select_turtle function that uses click x and y to identify a nearby turtle, stores turtles in a list, and classifies them into red, green, and blue groups.
Create and manage turtle groups with a dictionary to track red, green, and blue counts, then iterate over keys to update colors until each reaches three.
Count turtle clicks by color using a groups dictionary, incrementing the current color inside a for loop and pausing with a while loop until red, green, and blue reach three.
Disable clicks in the turtle demo by binding onclick to a do-nothing function, then follow a for and while loop through red, green, and blue steps.
Define a groups dictionary mapping colors to turtle lists and move color groups by ten pixels with screen updates, then bind red turtles to the r key.
Learn how to generalize turtle movement by passing a color parameter and using dictionaries to manage red, green, and blue turtles, reducing repetition with modular functions.
Master Python fundamentals through variables, data types like integers and strings, lists, dictionaries, tuples, for and while loops, if statements, and functions with parameters and arguments, using a turtle-based approach.
Explore using functools.partial to reduce repetition in turtle graphics, creating prefilled functions like choose red, green, or blue, and weighing readability against code compactness.
This course introduces the fundamentals of programming through graphics-based projects using Python's built-in `turtle` module. This is a fun way of learning the basics and you'll also be able to apply your newly-acquired knowledge to other non-graphics programs.
A Turtle Tale starts from the basics and introduces all the key topics that are central to programming and Python. All the projects are graphics-based, including creating animations and some games, too. However, the key Python topics you'll learn are universal.
I've been teaching Python for a decade and I believe in clear communication and in making sure students understand why things happen the way they do, and not just how to get things done. My teaching style is different. Try out the first few lessons and if it's your style, then we'll be together for a many hours.
No prior experience of Python or coding is required. This is a beginner's course.
Or perhaps you're not a beginner, but you've done a bit of coding in the past but didn't carry on. It wasn't you, it's likely you didn't find the resources that speak directly to you. I can't promise my style is what you're looking for, but you'll know after the first few lessons!
In this course you'll learn:
How to apply the key principles and mindset for communicating with a computer through programming
How to repeat blocks of code using `for` loops and `while` loops
How to store data using variables and using various data types
How to define your own functions to re-use code
How to use data structures including lists, dictionaries, and tuples
How to apply best practices when coding
This course will teach you all the fundamental tools, of course, but more importantly, it will teach you the right mindset for programming. This is just as important as learning all the programming techniques—if not more important.