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