changes Snape -> Snoope and add ability to extend exercise.

This commit is contained in:
Pamela Hathway 2024-08-23 19:18:35 +02:00
parent e082761458
commit d33816eedc
4 changed files with 33 additions and 22 deletions

View file

@ -7,7 +7,7 @@ def make_example_potion(student_name="ASPP student"):
"""Make and return an example potion."""
my_potion = potion_class.Potion(student_name=student_name)
# Set up your old kettle and light an eternal flame underneath it.
my_potion.setup(container=containers.OLD_KETTLE)
my_potion.setup(container=containers.OLD_KETTLE, heat_source="eternal_flame")
# Simmer for 5 hours.
cooking.simmer(my_potion, duration=5)
print(f"You successfully ran make_example_potion, {student_name}, well done :).")

View file

@ -18,10 +18,10 @@ def stir(potion, direction):
direction : {'clockwise', 'anti-clockwise'} str
The direction in which the potions is to be stirred
"""
if direction == "clockwise":
if direction.isin(["clockwise", "clock_wise", "clock-wise"]):
potion.colour = "vomit-yellow"
print('NO!! Your potion turns vomit-yellow. Did you stir in the right direction?')
elif direction == "anti-clockwise":
print('Your potion turns a revolting vomit-yellow.')
elif direction.isin(["anti-clockwise", "anticlockwise", "anti_clock_wise", "anti-clock-wise"]):
potion.colour = "newt-green"
print('Your potion turns a lovely newt-green.')
else:

View file

@ -4,11 +4,11 @@
import time
def inspection_by_Snape(potion, target_potion='python_expert'): # pylint: disable=invalid-name
def inspection_by_snoope(potion, target_potion='python_expert'): # pylint: disable=invalid-name
"""Checks if potion was brewed correctly.
Prints narration of inspection process - read to see if potion passed inspection.
Snape checks container, heat_source, ingredients, and whether potion was cooked.
Snoope checks container, heat_source, ingredients, and whether potion was cooked.
If something is wrong, function returns at that point.
Parameters
@ -16,16 +16,16 @@ def inspection_by_Snape(potion, target_potion='python_expert'): # pylint: disab
potion : obj
Instance of Potion (class from potion_class).
target_potion: str, optional
Name of potion to be checked by Snape. Currently possible potions are 'python expert', 'example_potion'
Name of potion to be checked by Snoope. Currently possible potions are 'python expert', 'example_potion'
"""
print('-------------------------------')
if not potion:
print('"There is no potion I can inspect!"')
print(' (Tip: are you actually returning a proper potion and passing it to Snape?)')
print('"There is no potion I can inspect!" says Snoope and ignores you completely.')
print(' (Tip: are you actually returning a proper potion and passing it to Snoope?)')
return
print(f'A sour looking Snape walks towards you to inspect your {target_potion} potion.')
print(f'A sour looking Snoope walks towards you to inspect your {target_potion} potion.')
print(f'"What do we have here, {potion.student_name}...?"')
print_delay_dots()
@ -43,9 +43,9 @@ def inspection_by_Snape(potion, target_potion='python_expert'): # pylint: disab
# check that correct setup was used
if potion.container == expected_container and potion.heat_source == expected_heat_source:
print('You have used the correct setup, Snape cannot complain - he looks even more sour.')
print('You have used the correct setup, Snoope cannot complain - he looks even more sour.')
else:
print(f'Snape smirks and remarks "You have used the wrong cauldron or heat, {potion.student_name}!" \n'
print(f'Snoope smirks and remarks "You have used the wrong cauldron or heat, {potion.student_name}!" \n'
f'With a flick of his wand he vanishes the potion. \n'
f'"I am taking 10 points from Ravenclaw, {potion.student_name}. Start again!"')
return
@ -57,20 +57,22 @@ def inspection_by_Snape(potion, target_potion='python_expert'): # pylint: disab
expected_ingredients = ['fish_eyes', 'tea_leaves', 'unicorn_hair']
expected_cooked = True
expected_simmer_duration = 2
expected_anticlock_colour = "newt-green"
expected_clock_colour = "vomit-yellow"
elif target_potion == 'example_potion':
expected_ingredients = []
expected_cooked = True
expected_simmer_duration = 5
else:
print(f'"What is this, {potion.student_name}? This is not the name of an existing potion, check your spelling!"')
print(' (Target potion was not recognised, please check your spelling.)')
print(' (Target potion name was not recognised, please check your spelling.)')
return
# check if all ingredients are there
if sorted(potion.ingredients) == expected_ingredients:
print('You have used the correct ingredients, Snape cannot complain - his face darkens.')
print('You have used the correct ingredients, Snoope cannot complain - his face darkens.')
else:
print(f'Snape smirks and remarks "You have used the wrong ingredients, {potion.student_name}!" \n'
print(f'Snoope smirks and remarks "You have used the wrong ingredients, {potion.student_name}!" \n'
f'With a flick of his wand he vanishes the potion. \n'
f'"I am taking 10 points from Gryffindor, {potion.student_name}. Start again!"')
return
@ -79,22 +81,31 @@ def inspection_by_Snape(potion, target_potion='python_expert'): # pylint: disab
# check that potion is cooked
if potion.cooked == expected_cooked and potion.simmer_duration == expected_simmer_duration:
print('The potion is cooked properly, Snape cannot complain - he is looking annyoyed now.')
print('The potion is cooked properly, snoope cannot complain - he is looking annyoyed now.')
else:
if potion.simmer_duration < expected_simmer_duration:
print('Snape smirks and remarks "Your potion is undercooked!" \n')
print('Snoope smirks and remarks "Your potion is undercooked!" \n')
elif potion.simmer_duration > expected_simmer_duration:
print('Snape smirks and remarks "Your potion is overcooked!" \n')
print('Snoope smirks and remarks "Your potion is overcooked!" \n')
print(f'With a flick of his wand he vanishes the potion. \n'
f'"I am taking 10 points from Hufflepuff, {potion.student_name}. Start again!"')
return
print_delay_dots()
print(f'Snape mutters "You got away this time, {potion.student_name}!", since there is nothing wrong with '
if potion.colour == expected_anticlock_colour:
print("Professor Dimbledore unexpectedly walks through the door, sees your potion and exclaims:")
print(f'"Oh my, {potion.student_name}, your potion is absolutely perfect! ')
print(' You earn 1000 points and the House Cup for this year\'s ASPP Summer School!"')
print('You and your class mates leave to have a butterbeer at the beach in Heraklion!')
elif potion.colour == expected_clock_colour:
print("Your potion does not only look disgusting, it also smells like rotten eggs. ")
print("You vomit into your cauldron and while this does not change the colour, you know you will not pass the class, so you start again. ")
else:
print(f'Snoope mutters "You got away this time, {potion.student_name}!", since there is nothing wrong with '
f'your {target_potion} potion.')
print_delay_dots()
print('You pack your bags and leave as fast as you can to have a butterbeer at the lake!')
print_delay_dots()
print('You pack your bags and leave as fast as you can to have a butterbeer at the beach in Heraklion!')
return

View file

@ -26,7 +26,7 @@ class Potion:
The name of the heat source used to cook the potions
"""
if container is None:
print('You have not specified a container - where do you think you will brew your potion?')
print('You have not specified a container - where will you brew your potion?')
if heat_source is None:
print('You have not specified a heat source - how will you cook the potion?')
self.container = container