import random
import re
def rollMulti(rollStr):
patt
= re.compile(r'\d+d\d+', re.IGNORECASE)
rolls = rollStr.split(',')
# validate each item in rolls with re
expression
rolls = [roll.strip() for roll in rolls if patt.match(roll.strip())]
# split on 'd' or
'D'
rollList
= [(int(i), int(j)) for i,j in [re.split('[dD]',item) for item in
rolls]]
outList
= []
for roll in rollList:
outList.append([random.randint(1, roll[1]) for i in range(roll[0])])
#return '\n'.join(['* On a roll of %s,
you rolled %s. Total: %d' % \
# (rolls[i],
outList[i], sum(outList[i]))
for i in range(len(rolls))])
# OP wants: You rolled 7,12,11 using
3d4,2d8,4d6 ((3,2,2),(8,4),(1,3,6,1))
return 'You rolled
%s using %s %s' % \
(','.join([str(sum(lst)) for lst in outList]),\
','.join(rolls),
\
tuple([tuple(item)
for item in outList]))
rollStr
= '4d6, 5D6,8H7,4d5,9d9'
print rollMulti(rollStr)
'''
>>> * On a
roll of 4d6, you rolled [5, 5, 4, 2]. Total: 16
* On a roll of 5D6,
you rolled [5, 3, 4, 1, 1]. Total: 14
* On a roll of 4d5,
you rolled [2, 5, 1, 1]. Total: 9
* On a roll of 9d9,
you rolled [5, 9, 4, 4, 6, 8, 3, 5, 5]. Total: 49
>>>
'''