In this challenge, we will implement an algorithm to help the sorting hat at Hogwarts school of witchcraft and wizardry decide which house you would more likely belong to.
When a new student join Hogwarts school, they are assigned to one of the four school houses depending on their personal qualities. The four houses are:
- Gryffindor values bravery, loyalty and chivalry
- Ravenclaw values curious minds, creativity and inventiveness
- Hufflepuff values kindness, friendliness, patience
- Slytherin values ambition and competitiveness
Now let’s look at our algorithm step by step using a flowchart that we will convert into a Python program.
Our algorithm will work by asking the end-user some yes/no questions to help define their personality and main qualities. Based on the answers provided by the end-user, the algorithm will allocate points to four score variables, one for each house.
At the end, after collecting all the end-user’s answers, the algorithm will find which house scored the most point and inform the end-user of the house that is a best match to their personality.
Step 1: Initialising the Sorting Hat Algorithm
# Hogwarts Sorting Hat Algorithm # Step 1: Initialise the Sorting Hat print("~~~~~~~~~~~~~~~~~~~~~~~") print("~ ~") print("~ The Sorting Hat ~") print("~ ~") print("~~~~~~~~~~~~~~~~~~~~~~~") print("") print("Welcome to Hogwarts school of witchcraft and wizardry!") print("Answer the following questions to be assigned your new house.") print("") gryffindor = 0 hufflepuff = 0 ravenclaw = 0 slytherin = 0
Python Code
Complete the Python code below…
Step 2: Asking Yes/NO Question
Using IF statements
Let’s ask our first question to see if the user is considering themselves as being a brave person. If so we will add one point to their score for Gryffindor as bravery is a trait of the Gryffindor house.
# Step 2: Collect user inputs brave = input("Are you a brave person?").lower() if brave=="yes": gryffindor = gryffindor + 1
Now let’s consider another question which could lead to two outcomes depending on the user’s answer. For instance let’s ask if the user considers themselves as being patient. If the answer is “yes” we will increase their Hufflepuff score by one however, if their answer is “no” we will increase their Slytherin score by 1 as students from the Slytherin students tends to be rather impatient.
patient = input("Would you describe yourself as being patient?").lower() if patient=="yes": hufflepuff = hufflepuff + 1 else: slytherin = slytherin + 1
Step 3: Adding more questions
It’s now your turn to work out the Python code needed to add the following 8 questions:
Step 4: Displaying the scores for each house
# Step 4: Display the scores print("Total Scores:") print(" - Gryffindor:" + str(gryffindor)) print(" - Ravenclaw:" + str(ravenclaw)) print(" - Hufflepuff:" + str(hufflepuff)) print(" - Slytherin:" + str(slytherin))
Step 5: Selecting the house with the highest score
# Step 5: Select the house with the highest score if gryffindor>=ravenclaw and gryffindor>=hufflepuff and gryffindor>=slytherin: print("You belong to Gryffindor!") elif ravenclaw>=gryffindor and ravenclaw>=hufflepuff and ravenclaw>=slytherin: print("You belong to Ravenclaw!") elif hufflepuff>=ravenclaw and hufflepuff>=gryffindor and hufflepuff>=slytherin: print("You belong to Hufflepuff!") elif slytherin>=ravenclaw and slytherin>=hufflepuff and slytherin>=gryffindor: print("You belong to Slytherin!")
Extension Task
Can you think of any additional questions you could add to your program to take more accurate decisions?
Solution...
The solution for this challenge is available to full members!Find out how to become a member:
➤ Members' Area