Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Random 生成一个与另一个数字足够远的随机数_Random - Fatal编程技术网

Random 生成一个与另一个数字足够远的随机数

Random 生成一个与另一个数字足够远的随机数,random,Random,设x,range,d为整数。我们想生成一个数字y,这样 1这是一个Python函数,您应该能够适应您选择的语言: import random def distantRand(a,b,x,d): #returns a random integer in range a ... b #which is greater than or equal to d units from x lb = max(a,x-d+1) ub = min(b,x+d-1) k

x,range,d
为整数。我们想生成一个数字
y
,这样


  • 1这是一个Python函数,您应该能够适应您选择的语言:

    import random
    
    def distantRand(a,b,x,d):
        #returns a random integer in range a ... b
        #which is greater than or equal to d units from x
    
        lb = max(a,x-d+1)
        ub = min(b,x+d-1)
        k = ub-lb+1 #number of numbers ruled out
    
        if b-k < a:
            return None
        else:
            y = random.randint(a,b-k)
            if y > x - d:
                y = y + k
            return y
    

    我已经在Python中这样做了

    import random
    
    range=100
    d=20
    x=115
    
    while(True): 
        y=random.randint(1,range)
        if abs(x-y)>=d:     
            print abs(x-y)
            print y
            break
    
    这是一个def

    import random
    
    r=100
    d=20
    x=115
    
    def yourandom (x,d,r):
        while(True):
            y=random.randint(1,r)
            if abs(x-y)>=d:
                print "abs(x-y)=",abs(x-y)
                print "y=",y
                break
    
    
    yourandom(x,d,r)
    

    选择您想要的距离
    d
    ,然后将随机数添加到其中是一种选择吗?这样,
    d+y
    将是随机的,并且始终处于所需的距离。
    x-d
    可能是负数,例如
    distantRand(1,10,2,4)
    @marmistrz Good point。我更加注意如何计算
    k
    。这对于较小的
    d
    来说是完全合理的,但是对于较大的
    d
    来说效率会明显降低。如果
    x=500,d=499,range=1000
    循环可以运行数百次。尽管如此,我知道这是一个可行的想法,但我对他的帖子有点不清楚。我以为他只是想快速解决问题。还有一些事情要考虑。正在处理;)而且,如果我们有足够多的坏运气,循环可能永远运行。错误检查是相当困难的,有时快速而肮脏的方法是完全合理的。
    import random
    
    r=100
    d=20
    x=115
    
    def yourandom (x,d,r):
        while(True):
            y=random.randint(1,r)
            if abs(x-y)>=d:
                print "abs(x-y)=",abs(x-y)
                print "y=",y
                break
    
    
    yourandom(x,d,r)