import random
from typing import Optional
from ..interface import verb_required_block
from ..interpreter import Context
[docs]class RangeBlock(verb_required_block(True, payload=True)):
"""
The range block picks a random number from a range of numbers seperated by ``-``.
The number range is inclusive, so it can pick the starting/ending number as well.
Using the rangef block will pick a number to the tenth decimal place.
An optional seed can be provided to the parameter to always choose the same item when using that seed.
**Usage:** ``{range([seed]):<lowest-highest>}``
**Aliases:** ``rangef``
**Payload:** ``number``
**Parameter:** ``seed``
**Examples:**
.. tagscript::
Your lucky number is {range:10-30}!
Your lucky number is 14!
Your lucky number is 25!
{=(height):{rangef:5-7}}
I am guessing your height is {height}ft.
I am guessing your height is 5.3ft.
"""
ACCEPTED_NAMES = ("rangef", "range")
[docs] def process(self, ctx: Context) -> Optional[str]:
"""
Process the range block
"""
try:
spl = ctx.verb.payload.split("-")
random.seed(ctx.verb.parameter)
if ctx.verb.declaration.lower() == "rangef":
lower = float(spl[0])
upper = float(spl[1])
base = random.randint(lower * 10, upper * 10) / 10
return str(base)
# base = random.randint(lower, upper)
# if base == upper:
# return str(base)
# if ctx.verb.parameter != None:
# random.seed(ctx.verb.parameter+"float")
# else:
# random.seed(None)
# return str(str(base)+"."+str(random.randint(1,9)))
lower = int(float(spl[0]))
upper = int(float(spl[1]))
return str(random.randint(lower, upper))
except: # pylint: disable=bare-except
return None