Python Magic 8 Ball Fortune Teller Game

This post may contain affiliate links.

Sharing is caring!

Let’s get started learning to code a Magic 8 Ball fortune teller game in Python. Today we’ll be showing you how to code this game and reviewing the important coding concepts covered. If you are looking for an introduction to the basics of Python, check out our beginner tutorial.

Python? What’s that?

Today, Python is one of the most popular programming languages. It is used in web application development, client-side, server-side development, machine learning, Scientific and Numeric Computing, and many more areas.

But first of all, why would you name a programming language python? Well, when Guido van Rossum, the creator of Python was implementing the code for the language, he used to read scripts from Monty Python’s Flying Circus TV series. I guess this came in his mind as he named the language Python! Although python first appeared in 1990, it took some time to become popular.

Python Coding Game: Create a Magic 8 Ball Fortune Teller

Last time, we built a simple Rock, Paper and Scissors game in python. The game was simply created using variables, list, while loop, if-elif-else ladder and a special randint method that we imported from random module. In this tutorial, we are going to create another game that mimics a class toy from my childhood: The Magic 8 ball – fortune teller. This will be fun!

We will use the basic concepts we learned last time and combine them with another new concept of programming language that is known as functions.

All About Functions

Functions are an integral part of almost every programming language. Functions exist in python too. What are functions and why we need them? A function is an organized block of code that is defined for some specific task.

Functions are used for code reusability. When we need a single block of code multiple times in a program, should we write it every time again? Absolutely not! This is where functions come in play. Functions can be called from anywhere in python. Values can be passed as parameters to a function and values can be returned from a function as well.

Functions are very helpful in programming. We will focus on functions in the magic 8 ball game. But first, let’s discuss a few advantages of using functions.

Advantages of functions in coding

1. Ease in program development.

2. Testing becomes easy.

3. Code reusability.

4. Better program readability.

5. Sharing of code becomes possible.

What is the Magic 8 Ball?

What is magic 8 ball? It is basically a toy that was developed in the 1950s. The user asks a question and a reply appears on the surface of the ball. If a user asks, “Am I going to die today?”, the reply could be, “Certainly yes!”. Don’t worry! You can play this game because there is no truth in its replies. It just randomly picks an answer from a set of answers and displays it on the screen whenever input is received.

So it is basic programming. What comes in your mind when I say “It just randomly picks an answer from a set of answers”? Yes! you guessed it right, the randint method. Last time we similarly used the randint method to pick a choice for computer from the array containing three values – Rock, Paper and Scissors. This time will do something similar to this. Let’s see what we are going to do in this game.

Let’s Decompose the Magic 8 Ball Game!

1. Again, there are two parties involved. One is the user and second is the magic 8 ball.

2. The user will type a question and magic 8 ball will give a reply.

3. There will be a set of answers and one answer per question will be picked from this set.

4. There will always be an option to finish the game.

Magic 8 Ball – Full Working Code

So here is the full working code of Magic 8 ball – fortune teller game in python. We will discuss this code step by step but first, make sure, you go through it properly.

#importing randint method
from random import randint

#List of answers
answers = ['Outlook good', 'Yes Signs point to yes', 'Reply hazy', 'try again', 'Ask again later', 'Better not tell you now','It is certain', 'It is decidedly so', 'Without a doubt', 'Yes – definitely', 'You may rely on it', 'As I see it, yes', 'Most likely', 'Cannot predict now', 'Concentrate and ask again', 'Dont count on it', 'My reply is no', 'My sources say no', 'Outlook not so good', 'Very doubtful']


print('Hello stranger!, I am the Magic 8 Ball')
print('**********')


#The magic 8 ball function
def Magic8Ball():
    print('Ask me a question.')
    input()

    #using randint method
    print (answers[randint(0, len(answers)-1)] )
    print('I hope that helped!')

    #calling Replay function
    choice = Replay()

    if(choice == 'Y'):
        #Calling Magic8ball function 
        Magic8Ball()
    elif(choice == 'N'):
        return
    else:
        print('I did not understand! Please repeat.')
        #Calling Replay function
        Replay()
        
    
#Function for user's decision
def Replay():
    print ('Do you have another question? Enter Y if yes or N if no.')
    choice = input()

    #Returning user input
    return choice


#Calling Magic8ball function
Magic8Ball()
print('*****I hope you got your answers*****')

Importing the randint method

#importing randint method
from random import randint

Here we imported the randint method from random module. We will use this method for choosing answers later.

List of answers

#List of answers
answers = ['Outlook good', 'Yes Signs point to yes', 'Reply hazy', 'try again', 'Ask again later', 'Better not tell you now','It is certain', 'It is decidedly so', 'Without a doubt', 'Yes – definitely', 'You may rely on it', 'As I see it, yes', 'Most likely', 'Cannot predict now', 'Concentrate and ask again', 'Dont count on it', 'My reply is no', 'My sources say no', 'Outlook not so good', 'Very doubtful']

This is quite a big list! There are 20 answers on this list. Magic 8 ball can choose any answer from this list. You can also personalize this to your own set of answers! Get creative!

Calling the Magic8Ball function

Further, there is a simple printing part and two functions. These two functions won’t do anything until they are called. So let’s skip this part for the time being and jump directly to the ending part of the code.

Magic8Ball()

This is where everything begins. One of the two functions is named Magic8Ball and here we are calling it. The program execution will skip the two function and when this line get’s executed, the magic8ball function will get invoked. There are no parameters for the magic8ball function. So there is nothing passed in the parenthesis. 

Working of Magic8Ball function

Now let’s understand the working of the Magic8Ball function.

def Magic8Ball():
    print('Ask me a question.')
    input()

    #using randint method
    print (answers[randint(0, len(answers)-1)] )
    print('I hope that helped!')

    #calling Replay function
    choice = Replay()

    if(choice == 'Y'):
        #Calling Magic8ball function 
        Magic8Ball()
    elif(choice == 'N'):
        return
    else:
        print('I did not understand! Please repeat.')
        #Calling Replay function
        Replay()
        

Pay attention to the very first line of the above code – def Magic8Ball(). This is how functions are defined in python using the def keyword. First, we ask for the user’s questions. Here, we are not storing the user’s question anywhere because it does not matter what the user asks. This is the concept of the game. 

Pay attention to the next line.

print(answers[randint(0, len(answers)-1)] )

This is the most important part of the game – Answer from Magic8Ball. So what is happening here? The randint method is used to get a random number.

randint(0, len(answers)-1)

Last time in the Rock, Paper, and Scissors game, we did something similar to this. There we passed 0 and 2 in the randint method because there were only 3 values to choose from. But in this program, we have 20 or we can have 30 or as much as answers we want. So instead of using a static value, we used a method that counts the length of the list.

len(answers)

This will return 20 because there are 20 values in the answers list. But remember the index of a list always starts from 0, which means, the last element is on the 19th index. You can learn more about this method of counting in our basic Python Tutorial. That is why we subtracted 1 from the returned value. Now the randint method will return a random number from 0 to 19.

answers[randint(0, len(answers)-1)]

The randint method is used in the square brackets. This is how a random answer will appear.

The Replay() function

This is the part where the user decides, should the game continue or not. We have a separate function for this input – Replay().

def Replay():
    print ('Do you have another question? Enter Y if yes or N if no.')
    choice = input()

    #Returning user input
    return choice

As mentioned earlier, each function has a specific task. The magic8ball function asks the question and gives an answer. The replay function asks what does the user want to do next – play or quit. The user has to enter ‘Y’ for yes and ‘N’ for no.

The return keyword is used to return a value from a function. But we need to store this returned value. But wait a minute! where did we call this replay function? In the magic8ball function. Let’s go back there.

Calling the replay function in magic8ball function

In the magic8ball function, we call the Replay function and store the returned value in the choice variable.

choice = Replay()

The choice variable will be used next in the if-elif-else ladder.

The if-elif-else Ladder

if(choice == 'Y'):
        #Calling Magic8ball function 
        Magic8Ball()
    elif(choice == 'N'):
        return
    else:
        print('I did not understand! Please repeat.')
        #Calling Replay function
        Replay()

Let’s understand the if-elif-else ladder step by step.

1. If the value of the choice variable is ‘Y’, the magic8ball function will be called again.

2. If the value of the choice variable is ‘N’, the program will exit the magic8ball function. Now pay attention here. 

elif(choice == 'N'):
        return

We only used the return keyword but no value is returned with it. This is a way of exiting from a function.

3. If the value of the choice variable is anything else except ‘Y’ and ‘N’, The reply function will be called again for appropriate user input.

This is how we can build a simple Magic 8 ball – fortune teller game in python.

Let’s look at the final code in action!

When the code is run the computer will start by asking the use a question. The user enters a question and the computer will randomly generate an answer, just like the toy magic 8 ball!

Pin for Later!

Enjoyed our tutorial? Pin for later!

These python games are so much fun! Teach python with these simple python tutorials for kids. Kids will learn to program their own rock paper scissors and magic 8 ball games with this step by step python programming tutorial for the classroom. Enjoy playing these fun computer coding games and learn the basic concepts of coding as well. #coding #education #technology

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *