Impractical Python Projects

Impractical Python Projects

Playful Programming Activities to Make You Smarter
by Lee Vaughan
November 2018, 424 pp.

"Python is a programming language, but it is also fun to play with. This book recognises that."
—Geek Tech Stuff

Download Chapter 3: Solving Anagrams
Download the code files and solutions to the book's programs at its GitHub page

Impractical Python Projects picks up where the complete beginner books leave off, expanding on existing concepts and introducing new tools that you’ll use every day. And to keep things interesting, each project includes a zany twist featuring historical incidents, pop culture references, and literary allusions.

You’ll flex your problem-solving skills and employ Python’s many useful libraries to do things like:

  • Help James Bond crack a high-tech safe with a hill-climbing algorithm
  • Write haiku poems using Markov Chain Analysis
  • Use genetic algorithms to breed a race of gigantic rats
  • Crack the world’s most successful military cipher using cryptanalysis
  • Foil corporate security with invisible electronic ink
  • Derive the anagram, “I am Lord Voldemort” using linguistical sieves
  • Plan your parents’ secure retirement with Monte Carlo simulation
  • Save the sorceress Zatanna from a stabby death using palingrams
  • Model the Milky Way and calculate our odds of detecting alien civilizations
  • Help the world’s smartest woman win the Monty Hall problem argument
  • Reveal Jupiter’s Great Red Spot using optical stacking
  • Save the head of Mary, Queen of Scots with steganography

Simulate volcanoes, map Mars, and more, all while gaining valuable experience using free modules like Tkinter, matplotlib, Cprofile, Pylint, Pygame, Pillow, and Python-Docx.

Whether you’re looking to pick up some new Python skills or just need a pick-me-up, you’ll find endless educational, geeky fun with Impractical Python Projects.

Author Bio 

Lee Vaughan is a geologist with over 30 years' experience in the petroleum industry. As the Senior Technical Professional for Geological Modeling at a major international oil company, he was involved in the construction and review of computer models, the development, testing, and commercialization of software, and the training of geoscientists and engineers. An advocate for nonprogrammers who must use programming in their careers, he wrote Impractical Python Projects to help self-learners hone their skills with the Python language.

Table of contents 

Chapter 1: Silly Name Generator
Chapter 2: Finding Palingram Spells
Chapter 3: Solving Anagrams
Chapter 4: Decoding American Civil War Ciphers
Chapter 5: Encoding English Civil War Ciphers
Chapter 6: Writing in Invisible Ink
Chapter 7: Breeding Giant Rats with Genetic Algorithms
Chapter 8: Counting Syllables for Haiku Poetry
Chapter 9: Writing Haiku with Markov Chain Analysis
Chapter 10: Are We Alone? Exploring the Fermi Paradox
Chapter 11: The Monty Hall Problem
Chapter 12: Securing your Nest Egg
Chapter 13: Simulating an Alien Volcano
Chapter 14: Mapping Mars with the Mars Orbiter
Chapter 15: Improving Your Astrophotography with Planet Stacking
Chapter 16: Finding Frauds with Benford's Law
Appendix: Practice Project Solutions

View the detailed Table of Contents
View the Index


"Python is programming language, but it is also fun to play with and this book recognises that."
—Geek Tech Stuff


Page 79: code output at bottom of page is based on Figure 4-3, not Figure 4-2.

Page 218: Indentation for the listing on the page should be as follows:

>>> from random import randint
>>> trials = 100000
>>> success = 0
>>> for trial in range(trials):
           faces = set()
           for rolls in range(6):
               roll = randint(1, 6)
           if len(faces) == 6:
               success += 1
>>> print("probability of success = {}".format(success/trials))
probability of success = 0.01528

Page 250: Listing 12-1 should read as:

import sys
import random
import matplotlib.pyplot as plt
def read_to_list(file_name):

    """Open a file of data in percent, convert to decimal & return a list."""

    with open(file_name) as in_file:

        lines = [float(line.strip()) for line in in_file]

        decimal = [round(line / 100, 5) for line in lines]

        return decimal
def default_input(prompt, default=None):

    """Allow use of default values in input"""

    prompt = '{} [{}]: '.format(prompt, default)

     response = input(prompt)

    if not response and default:

        return default


        return response