Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python3
- import random
- import re
- PATTERN = re.compile(r'''(\d+) d (\d+) # count, "d", eyes
- (?:(\+|-|\*|/?) (\d+))? # [operator, value]
- ''', re.X)
- def Add(summand):
- return lambda a: a + summand
- def Sub(subtrahend):
- return lambda a: a - subtrahend
- def Mul(factor):
- return lambda a: a * factor
- def Div(divisor):
- return lambda a: a / divisor
- MODIFICATOR_MAPPING = {
- '+': Add,
- '-': Sub,
- '*': Mul,
- '/': Div,
- }
- def Dice(count, eyes, mod=lambda a: a):
- return lambda: mod(sum([random.randint(1, eyes) for _ in range(count)]))
- def create_from_string(string):
- count, eyes, operator, value = PATTERN.match(string).groups()
- # AttributeError if something went wrong here (pattern-mismatch)
- if operator and value:
- return Dice(int(count), int(eyes),
- MODIFICATOR_MAPPING[operator](int(value)))
- else:
- return Dice(int(count), int(eyes))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement