adds brewing files
This commit is contained in:
parent
d3c22673c0
commit
c622d3ba31
26
src/brewing/brew_potions.py
Normal file
26
src/brewing/brew_potions.py
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
from src.brewing import potion_class
|
||||||
|
from src.brewing import containers
|
||||||
|
from src.brewing import cooking
|
||||||
|
from src.brewing import inspection
|
||||||
|
|
||||||
|
def make_example_potion(student_name="ASPP student"):
|
||||||
|
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)
|
||||||
|
# Simmer for 5 hours.
|
||||||
|
cooking.simmer(my_potion, duration=5)
|
||||||
|
print(f"You successfully ran make_example_potion, {student_name}, well done :).")
|
||||||
|
return my_potion
|
||||||
|
|
||||||
|
|
||||||
|
def make_python_expert_potion(student_name):
|
||||||
|
print("I am a Python Expert")
|
||||||
|
# todo: write this function!
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
my_name = 'ASPP student'
|
||||||
|
my_potion = make_example_potion(student_name=my_name)
|
||||||
|
# Let Snape inspect the potion
|
||||||
|
inspection.inspection_by_Snape(potion=my_potion, target_potion='example_potion')
|
6
src/brewing/containers.py
Normal file
6
src/brewing/containers.py
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
# containers
|
||||||
|
pewter_cauldron = 'pewter_cauldron'
|
||||||
|
copper_cauldron = 'copper_cauldron'
|
||||||
|
martini_glass = 'martini_glass'
|
||||||
|
old_kettle = 'old_kettle'
|
||||||
|
raki_bottle = 'raki_bottle'
|
50
src/brewing/cooking.py
Normal file
50
src/brewing/cooking.py
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
# heat sources
|
||||||
|
fire = 'fire'
|
||||||
|
eternal_flame = 'eternal_flame'
|
||||||
|
breathe_on_cauldron = 'breathe_on_cauldron'
|
||||||
|
|
||||||
|
|
||||||
|
def stir(potion, direction):
|
||||||
|
"""Stirs the potion.
|
||||||
|
|
||||||
|
Updates colour in the class instance.
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
potion : Potion instance
|
||||||
|
The potion to be stirred.
|
||||||
|
direction : {'clockwise', 'anti-clockwise'} str
|
||||||
|
The direction in which the potions is to be stirred
|
||||||
|
"""
|
||||||
|
if direction == "clockwise":
|
||||||
|
potion.colour = "vomit-yellow"
|
||||||
|
print('NO!! Your potion turns vomit-yellow. Did you stir in the right direction?')
|
||||||
|
elif direction == "anti-clockwise":
|
||||||
|
potion.colour = "newt-green"
|
||||||
|
print('Your potion turns a lovely newt-green.')
|
||||||
|
else:
|
||||||
|
print("What are you doing to your potion??")
|
||||||
|
print("You need to stir, not distribute the contents on the floor!")
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
def simmer(potion, duration):
|
||||||
|
"""Cooks the potion.
|
||||||
|
|
||||||
|
Updates simmer_duration and cooked attributes in the class instance.
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
potion : Potion instance
|
||||||
|
The potion to be cooked.
|
||||||
|
duration : int
|
||||||
|
How long to cook the potion for [hours].
|
||||||
|
"""
|
||||||
|
potion.simmer_duration = duration
|
||||||
|
if duration < 2:
|
||||||
|
print('Are you sure you are cooking the potion enough? Your ingredients look a bit raw...')
|
||||||
|
elif duration > 5:
|
||||||
|
print('Oops, you have fallen asleep at your desk! Are you sure you want to simmer this long?')
|
||||||
|
else:
|
||||||
|
potion.cooked = True
|
||||||
|
return
|
5
src/brewing/ingredients.py
Normal file
5
src/brewing/ingredients.py
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
# ingredients
|
||||||
|
snake_skin = 'snake_skin'
|
||||||
|
fish_eyes = 'fish_eyes'
|
||||||
|
unicorn_hair = 'unicorn_hair'
|
||||||
|
tea_leaves = 'tea_leaves'
|
103
src/brewing/inspection.py
Normal file
103
src/brewing/inspection.py
Normal file
|
@ -0,0 +1,103 @@
|
||||||
|
import time
|
||||||
|
|
||||||
|
|
||||||
|
def inspection_by_Snape(potion, target_potion='python_expert'):
|
||||||
|
"""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.
|
||||||
|
If something is wrong, function returns at that point.
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
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'
|
||||||
|
"""
|
||||||
|
|
||||||
|
print('-------------------------------')
|
||||||
|
if not potion:
|
||||||
|
print(f'"There is no potion I can inspect!"')
|
||||||
|
print(f' (Tip: are you actually returning a proper potion and passing it to Snape?)')
|
||||||
|
return
|
||||||
|
|
||||||
|
print(f'A sour looking Snape walks towards you to inspect your {target_potion} potion.')
|
||||||
|
print(f'"What do we have here, {potion.student_name}...?"')
|
||||||
|
print_delay_dots()
|
||||||
|
|
||||||
|
# set variables for each potion that need to be checked
|
||||||
|
if target_potion == 'python_expert':
|
||||||
|
expected_container = 'pewter_cauldron'
|
||||||
|
expected_heat_source = 'fire'
|
||||||
|
elif target_potion == 'example_potion':
|
||||||
|
expected_container = 'old_kettle'
|
||||||
|
expected_heat_source = 'eternal_flame'
|
||||||
|
else:
|
||||||
|
print(f'"What is this, {potion.student_name}? This is not the name of an existing potion, check your spelling!"')
|
||||||
|
print(f' (Target potion was not recognised, please check your spelling.)')
|
||||||
|
return
|
||||||
|
|
||||||
|
# check that correct setup was used
|
||||||
|
if potion.container == expected_container and potion.heat_source == expected_heat_source:
|
||||||
|
print(f'You have used the correct setup, Snape 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'
|
||||||
|
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
|
||||||
|
|
||||||
|
print_delay_dots()
|
||||||
|
|
||||||
|
# set variables for each potion that need to be checked
|
||||||
|
if target_potion == 'python_expert':
|
||||||
|
expected_ingredients = ['fish_eyes', 'tea_leaves', 'unicorn_hair']
|
||||||
|
expected_cooked = True
|
||||||
|
expected_simmer_duration = 2
|
||||||
|
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(f' (Target potion was not recognised, please check your spelling.)')
|
||||||
|
return
|
||||||
|
|
||||||
|
# check if all ingredients are there
|
||||||
|
if sorted(potion.ingredients) == expected_ingredients:
|
||||||
|
print(f'You have used the correct ingredients, Snape cannot complain - his face darkens.')
|
||||||
|
else:
|
||||||
|
print(f'Snape 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
|
||||||
|
|
||||||
|
print_delay_dots()
|
||||||
|
|
||||||
|
# check that potion is cooked
|
||||||
|
if potion.cooked == expected_cooked and potion.simmer_duration == expected_simmer_duration:
|
||||||
|
print(f'The potion is cooked properly, Snape cannot complain - he is looking annyoyed now.')
|
||||||
|
else:
|
||||||
|
if potion.simmer_duration < expected_simmer_duration:
|
||||||
|
print(f'Snape smirks and remarks "Your potion is undercooked!" \n')
|
||||||
|
elif potion.simmer_duration > expected_simmer_duration:
|
||||||
|
print(f'Snape 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 '
|
||||||
|
f'your {target_potion} potion.')
|
||||||
|
print_delay_dots()
|
||||||
|
print(f'You pack your bags and leave as fast as you can to have a butterbeer at the lake!')
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def print_delay_dots(dur=0.5, number=2):
|
||||||
|
for i in range(number):
|
||||||
|
time.sleep(dur)
|
||||||
|
print('.')
|
46
src/brewing/potion_class.py
Normal file
46
src/brewing/potion_class.py
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
class Potion:
|
||||||
|
|
||||||
|
def __init__(self, student_name):
|
||||||
|
"""This is a class for brewing potions."""
|
||||||
|
self.colour = 'there-is-no-potion-so-the-potion-has-no-color'
|
||||||
|
self.cooked = False
|
||||||
|
self.container = None
|
||||||
|
self.heat_source = None
|
||||||
|
self.ingredients = []
|
||||||
|
self.simmer_duration = -1
|
||||||
|
self.student_name = student_name
|
||||||
|
|
||||||
|
def setup(self, container=None, heat_source=None):
|
||||||
|
"""Add a container and/or heat_source to the potion.
|
||||||
|
|
||||||
|
Updates container and heat_source attributes in the class instance.
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
container : str, optional
|
||||||
|
The name of the container to brew the potion in.
|
||||||
|
heat_source : str, optional
|
||||||
|
The name of the heat source used to cook the potions
|
||||||
|
"""
|
||||||
|
if container == None:
|
||||||
|
print(f'You have not specified a container - where do you think you will brew your potion?')
|
||||||
|
if heat_source == None:
|
||||||
|
print(f'You have not specified a heat source - how will you cook the potion?')
|
||||||
|
self.container = container
|
||||||
|
self.heat_source = heat_source
|
||||||
|
|
||||||
|
def add_ingredients(self, ingredients=None):
|
||||||
|
"""Add ingredients to the potion.
|
||||||
|
|
||||||
|
Updates ingredients and colour attributes in the class instance.
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
ingredients : array_like, optional
|
||||||
|
A list of ingredients (str) to add to the potion.
|
||||||
|
"""
|
||||||
|
if ingredients is None:
|
||||||
|
print(f'You have added no ingredients - have you spilt them on the floor again?')
|
||||||
|
else:
|
||||||
|
self.ingredients = ingredients
|
||||||
|
self.colour = "transparent"
|
Loading…
Reference in a new issue