How to create a Mad Libs game in Python - Part 1
Mad Libs tutorial
- Understand and use sequence in an algorithm
- Understand and use iteration in an algorithm (FOR and WHILE loops)
- Understand and use data structures in an algorithm (for example, Lists, Tables or Arrays)
- Design, write and debug programs that accomplish specific goals; solve problems by breaking them into smaller parts. Select, use and combine a variety of software on a range of digital devices to design and create a range of programs.
- Use sequence, selection and repetition in programs; work with variables and various forms of input and output
- Use logical reasoning to explain how some simple algorithms work; detect and correct errors in algorithms and programs
- Use two or more programming languages, at least one of which is textual, to solve a variety of computational problems.
STUDENT: COMPUTATIONAL THINKER:
- 5a: Students break problems into component parts, extract key information, and develop descriptive models to understand complex systems or facilitate problem-solving.
- 5c: Students break problems into component parts, extract key information, and develop descriptive models to understand complex systems or facilitate problem-solving.
- 5d: Students understand how automation works and use algorithmic thinking to develop a sequence of steps to create and test automated solutions.
EDUCATOR: COMPUTATIONAL THINKING COMPETENCIES:
- 4b: Design authentic learning activities that ask students to leverage a design process to solve problems with awareness of technical and human constraints and defend their design choices.
COMPUTER SCIENCE EDUCATORS:
- 2a: Plan and teach computer science lessons/units using effective and engaging practices and methodologies:
i. Select a variety of real-world computing problems and project-based methodologies that support active and authentic learning and provide opportunities for creative and innovative thinking and problem solving
ii. Demonstrate the use of a variety of collaborative groupings in lesson plans/units and assessments
iii. Design activities that require students to effectively describe computing artifacts and communicate results using multiple forms of media
iv. Develop lessons and methods that engage and empower learners from diverse cultural and linguistic backgrounds
v. Identify problematic concepts and constructs in computer science and appropriate strategies to address them
vi. Design and implement developmentally appropriate learning opportunities supporting the diverse needs of all learners
vii. Create and implement multiple forms of assessment and use resulting data to capture student learning, provide remediation and shape classroom instruction
CSTA K–12 CS Standards:
- 1B-AP-08: Compare and refine multiple algorithms for the same task and determine which is the most appropriate.
- 1B-AP-09: Create programs that use variables to store and modify data.
- 1B-AP-10: Create programs that include sequences, events, loops, and conditionals.
- 1B-AP-11: Decompose (break down) problems into smaller, manageable subproblems to facilitate the program development process.
- 1B-AP-13: Use an iterative process to plan the development of a program by including others' perspectives and considering user preferences.
- 1B-AP-15: Test and debug (identify and fix errors) a program or algorithm to ensure it runs as intended.
- 1B-AP-17: Describe choices made during program development using code comments, presentations, and demonstrations.
- 2-AP-11: Create clearly named variables that represent different data types and perform operations on their values
- 2-AP-12: Design and iteratively develop programs that combine control structures, including nested loops and compound conditionals.
- 2-AP-15: Seek and incorporate feedback from team members and users to refine a solution that meets user needs.
- 2-AP-16: Incorporate existing code, media, and libraries into original programs, and give attribution.
- 2-AP-17: Systematically test and refine programs using a range of test cases.
- 3A-AP-14: Use lists to simplify solutions, generalizing computational problems instead of repeatedly using simple variables.
- 3A-AP-15: Justify the selection of specific control structures when tradeoffs involve implementation, readability, and program performance, and explain the benefits and drawbacks of choices made.
AREA OF LEARNING AND EXPERIENCE: Science and Technology:
Computation is the foundation for our digital world.
Progression step 3
- I can use conditional statements to add control and decision-making to algorithms.
- I can identify repeating patterns and use loops to make my algorithms more concise.
- I can explain and debug algorithms.
Progression step 4
- I can decompose given problems and select appropriate constructs to express solutions in a variety of environments.
- I can select and use data structures that efficiently manage data in algorithms.
- I can plan and implement test strategies to identify errors in programs.
Progression step 5
- I can identify, define and decompose problems, choose appropriate constructs and express solutions in a variety of environments.
- I can use file-handling techniques to manipulate data in algorithms.
- I can test, evaluate and improve a solution in software.
What is a Mad Libs
According to Wikipedia, Mad Libs is a phrasal template word game, usually played at parties, where one player prompts other players for a list of words to substitute blanks in a story before reading out the completed story aloud. Source: https://en.wikipedia.org/wiki/Mad_Libs
We start with a story, containing several blanked out words. Here’s a basic example:
Rumble in the _______.
We then prompt the user to fill in the gaps, in this case, with a noun or place. We might end up with something like this:
Rumble in the Toilet.
Obviously, the more entertaining the original story, the better the laughs will be at the end!
To find out more, visit the Mad Libs wiki page: en.wikipedia.org/wiki/Mad_Libs
In this lesson, students will code a “Mad Lib” game in Python. The game will work by prompting the user to enter some words (e.g. person’s name, noun, adjective, place, object etc.) and substitute these with blanks in a story.
Direct students to one of the online Mad Lib games listed below. Ask students to submit random words (as instructed) and note down some of the answers. Ask students to note down any unusual answers.
Note: Use these sites at your own risk. teachwithict.com is not responsible for the content of external Internet sites.
Online Mad Lib games:
- Wacky Web Tales – https://www.eduplace.com/tales/
- Mad Libs - http://www.madglibs.com/ (Click on each tile to reveal a mad lib).
Print out some example mab libs from madlibs.com and give to students to complete in small groups - http://www.madlibs.com/printables/ Tip: I find that the Mad Libs ‘Hall passes’ are always a hit: http://www.madlibs.com/content/uploads/2016/04/KIDS-excuse-hall-pass_1_.pdf
Display the mad libs starter PowerPoint (below) on the board and ask students to suggest words to fill in the blanks. You could get the class to vote for their favourite suggestions.
Once students have completed the starter activity, inform them that they are going to create a variation of the Mad Libs format using Python.
There are several ways to create a Mad Lib game in Python. In our version, the program will pick a story at random from a list however, before we start coding our “Ultimate Mad Lib” game, let’s start with a simple version:
Step 1. Creating your first Mad Lib
Instruct students to type in and run the following code:
noun = input("Enter a noun: ")
print("Rumble in the " + noun)
Challenge students to:
- comment their code, using the hashtag (#), explaining what the code is doing.
- create their own mad lib (If students struggle to come up with their own Mad Libs, they can use the examples from the starter activity).
- create a Mad Lib that contains 2 or even 3 user inputs.
noun = input("Enter an animal: ")
noun2 = input("Enter another animal: ")
noun3 = input("Enter an object: ")
print("The " + noun + " and the " + noun2 + " went to sea in a beautiful pea green noun3.")
In the next example students are going to create a text file containing several mad libs. Just like the previous example, the program will ask the user to enter one or several nouns, verbs, adjectives etc. but this time will pick a Mad Lib at random from a text file.
Step 1. Introducing the ‘String replace method’
Before students create their text file, introduce them to the ‘string replace method’.
Sometimes in Python, you find yourself in a situation where you want to modify the contents of string by replacing one piece of text with another. Luckily, Python makes this job easy thanks to the string replace method.
1. To understand how the .replace() method works, ask students to try the following code:
string = "This is a string"
string = string.replace("is", "was")
Explain to students that the line ‘string = string.replace(“is”, “was”) looks for the word “is” in the sentence and replaces it with the word “was”. Tell students that they will use the .replace() method to replace the blank(s) in their Mad Libs with the word(s) input by the user.
Step 2. Creating the text file
Next, the students need to create a text file for their Mad Libs– suggest saving the file madlibs.txt. Challenge students to make up some stories and store each one on a different line – instruct students to type in the word ‘blank’ for the word they want to be replaced, for example:
It don't mean a thing if it ain't got that blank!
Rumble in the blank!
I can't start my day without my blank!
1. Instruct students to copy the following code (making sure that they read the comments explaining what the code is doing):
# Program to read a random Mad Lib from a file and print the Mad Lib with the user's response
# Open the Mad Libs text file
f = open('madlibs.txt','r')
# Read the whole file and store each line in a list
madlibText = f.readlines()
# Choose a random line from the list
madlib = random.choice(madlibText)
# Ask the user to input a noun
noun = input("Enter a noun: ")
# Replace the blank with the user's input
madlib = madlib.replace("blank", noun)
# Print out the Mad Lib including the user's response
Challenge students to:
- modify their code so that it displays the randomly chosen Mad Lib first before prompting the user for their response.