我使用Red language,从1000到9999之间选择一个随机数。查看了random的文档后,我希望random
从一系列的数字中选择一个数字从1000到9999。
我知道我可以做999 + (random 9000)
,但我认为这听上去不好。
答案 0 :(得分:4)
有一种成熟的方法可以计算两个包含边界之间的随机数:
(random(0,1) * (max - min + 1)) + min
将其移植到Red应该很简单,将其包装到专用功能中将减轻对“可读性”的关注。例如:
>> between: func [lower upper][-1 + lower + random upper - lower + 1]
== func [lower upper][-1 + lower + random upper - lower + 1]
>> round average collect [loop 1'000'000 [keep between -10 10]]
== 0.0
-1
弥补了random
范围始于1
而不是0
的事实。
poka-yoke between
将通过从两个给定的边界中选取最小值/最大值来确保下限确实比上限更低。我将此留给读者练习。
从字面上选择一系列随机数的另一种方法是:
>> thru: make op! func [lower upper][collect [until [keep lower greater? lower: lower + 1 upper]]]
== make op! [[lower upper]]
>> -10 thru 10
== [-10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10]
>> random/only -10 thru 10
== 5
答案 1 :(得分:3)
您可以定义自己的函数,例如
random2: function [a b] [a - 1 + random b - a + 1]
然后random2 1000 9999