Dies wirft einen n-seitigen Würfel.
Code: Alles auswählen
import random
def d(n, aces=False):
r = random.randrange(n) + 1
return r + d(n, aces) if aces and r == n else r
Code: Alles auswählen
import re
_RE_DICE = re.compile(r"(\d+)?d(\d+)?|(\d+)|([-+])")
def roll(dice, aces=False):
result = 0; sign = 1
for m in _RE_DICE.finditer(dice):
if m.lastindex == 2:
count = int(m.group(1) or 1)
sides = int(m.group(2) or 6)
for i in range(count):
result += d(sides, aces) * sign
elif m.lastindex == 3:
result += int(m.group(3)) * sign
else:
sign = +1 if m.group(4) == '+' else -1
return result
Stefan