How do you shuffle functions using python to then call the shuffled result?

Question:

I am trying to make functions which would print separate questions. I then want the functions to be put into a list and shuffled with the shuffled functions being called in their shuffled order.

I tried to change the functions into variables and then put the variables in a list. I then tried to use random.shuffle()
to then shuffle the list and then print the shuffled list by using return(questionlist[0]). However, it simply returned an error message.

My code looked a little like this:

import random
def Question1():  
    print("Which one of these is a safe password?")

def Question2():   
    print("What can you do to get less spam?")

def Question3():   
    print("What term describes the act of annoying someone online?")
def questionfunction():
    q1 = Question1
    q2 = Question2
    q3 = Question3
    questionlist = [q1,q2,q3]
    random.shuffle(questionlist)
    return(questionlist[0])
    return(questionlist[1])
    return(questionlist[2])
questionfunction()
Asked By: DominionGaming

||

Answers:

You have to actually call the functions. Further, you don’t want to return until you actually call all three. You also don’t need any additional variables; Question1 is already a variable that refers to the function originally bound to it.

def questionfunction():
    questionlist = [Question1, Question2, Question3]
    random.shuffle(questionlist)
    questionlist[0]()
    questionlist[1]()
    questionlist[2]()

You could, alternatively, just return the shuffled list and let the caller call the functions.

def questionfunction():
    questionlist = [Question1, Question2, Question3]
    random.shuffle(questionlist)
    return questionlist

for q in questionfunction():
    q()
Answered By: chepner
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.