def from_str()

in rtfm/dynamics/dice.py [0:0]


    def from_str(cls, s):
        dice = []
        for sub in s.split('+'):
            sub = sub.strip()
            if 'd' not in sub:
                constant = int(sub)
                dice.append(ConstantDice(constant))
            else:
                splits = sub.split('d')
                if len(splits) == 1:
                    num = 1
                    max_roll = splits[0]
                elif len(splits) == 2:
                    num, max_roll = splits
                    if num == '':
                        num = 1
                else:
                    raise Exception('could not parse dice string {} in main dice string {}'.format(sub, s))
                dice.extend([SingleDice(max=int(max_roll)) for _ in range(int(num))])
        return SumDice(dice) if len(dice) > 1 else dice[0]