Advertisement
Guest User

Rolling the dice ...

a guest
Aug 13th, 2013
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.02 KB | None | 0 0
  1. #!/usr/bin/env python3
  2. import random
  3. import re
  4.  
  5. PATTERN = re.compile(r'''(\d+) d (\d+)              # count, "d", eyes
  6.                         (?:(\+|-|\*|/?) (\d+))?    # [operator, value]
  7.                     ''', re.X)
  8.  
  9.  
  10. def Add(summand):
  11.     return lambda a: a + summand
  12.  
  13. def Sub(subtrahend):
  14.     return lambda a: a - subtrahend
  15.  
  16. def Mul(factor):
  17.     return lambda a: a * factor
  18.    
  19. def Div(divisor):
  20.     return lambda a: a / divisor
  21.  
  22. MODIFICATOR_MAPPING = {
  23.     '+': Add,
  24.     '-': Sub,
  25.     '*': Mul,
  26.     '/': Div,
  27.     }
  28.  
  29. def Dice(count, eyes, mod=lambda a: a):
  30.     return lambda: mod(sum([random.randint(1, eyes) for _ in range(count)]))
  31.  
  32. def create_from_string(string):
  33.     count, eyes, operator, value = PATTERN.match(string).groups()
  34.         # AttributeError if something went wrong here (pattern-mismatch)
  35.     if operator and value:
  36.         return Dice(int(count), int(eyes),
  37.                     MODIFICATOR_MAPPING[operator](int(value)))
  38.     else:
  39.         return Dice(int(count), int(eyes))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement