# The official playground cannot run Random

When I use the playground on the official website to run
`import Random "mo:base/Random";`
It will prompt this error, is it because of a version problem?

btw, which Homie knows how to use Random, can anyone provide some code examples?

`Random` depend on the `raw_rand` system API, which is not implemented in the interpreter, so you are getting an `assertion failure`.

You can check this example for random usage: examples/motoko/random_maze at master · dfinity/examples · GitHub

1 Like

Hi @chenyan
Thanks for your reply, I have a question, please help.

I know that the range of the return value in rangeFrom is determined by the parameter p, the return value of rangeFrom: [0 … 2^p-1], if p is 3, then the range of the random number is [0…8].
If the random number range I want to obtain is [0…99] or [5…10], how should I determine this parameter p first.For example, I expect to get a random number from 0 to 99, but I need to know what p is first.
Thanks

I think this code should almost do what you want:

(or set p to be the binary logarithm of the range, draw a number, if in range, return it + mix, otherwise reject and try again)

Hey @claudio , I am trying to get a random number between [0…`max`) according to the code example you sent me.
But when I call the getMax function, the returned result is (opt 0). Is there any solution?
This is my code, thanks

``````func bit(b : Bool) : Nat {
if (b) 1 else 0;
};

func chooseMax(f : Random.Finite, max : Nat) : ? Nat {
assert max > 0;
do ? {
if (max == 1) return ? 0;
var k = bit(f.coin()!);

var n = max / 2;
while (n > 1) {
k := k * 2 + bit(f.coin()!);
n := n / 2;
};

if (k < max)
return ? k
else chooseMax(f, max) !; // retry
};
};

public func getMax(max:Nat):async ?Nat{
let entropy = await Random.blob();
var f = Random.Finite(entropy);
var result= chooseMax(f,max);
return result;
};
``````
1 Like

@claudio @chenyan can one of you please DM me. I have an issue related to this problem. Thank you.

1 Like

Oh dear, I’m sorry I never replied to your message - I must have overlooked a notification.

Turns out there is a bug in Random.mo that probably explains why you were seeing this behaviour.

Thanks to @LightningLad91 for investigating and prompting me again.

3 Likes