使用带有randint()

时间:2017-02-27 16:02:45

标签: python random operators logical-operators

我想实现一个函数,其中一个值在x和x * 1.1之间使用randint()逐渐增加但是我希望在它被使用了足够次数时限制范围。

是否可以结合类似'和'具有randint()的属性。我已经愚弄了一段时间,但没有想出一些有用的东西。也许我错过了一些显而易见的东西:语法。

例如new_val = randint(old_val,(old_val * 1.1)和!> max_val)

3 个答案:

答案 0 :(得分:0)

这似乎是使用发电机的好地方:

def capped_geometric_series(x, max_val, growth_factor=1.1):
    while True:
        x = randint(x, int(x * growth_factor))
        if x < max_val:
            yield x
        else:
            break

然后

for x in capped_geometric_series(30, 100):
    print(x)

给出类似

的内容
33
36
38
40
42
46
48    # Note: this allows the same value to be returned
48    #   multiple times; in fact, if x is too small
48    #   (ie if x * growth_factor < x + 1)
52    #   it will return x an infinite number of times.
56
59
64
67
67
68
69
73
80
82
84
84
86
91
98
98

答案 1 :(得分:0)

最后,我设法找到了一种新颖的解决方法。我希望能够灵活地以递归方式调用函数,因此我使用了min()而不是生成器。

def function(val):
    max_val = 100
    old_val = (min(value,(int(max_aero * 0.9))
    new_val = random.randint(old_val, min(int(val* 1.1), max_val))

它比我想要的更难读,但似乎正在工作!

答案 2 :(得分:-1)

使用'min'?..

new_val = randint(min(old_val,max_val),int(min(old_val*1.1,max_val)))

或者如果这是你想要的......

new_val = randint(old_val,int(old_val*1.1)) if old_val<max_val else None