我想实现一个函数,其中一个值在x和x * 1.1之间使用randint()逐渐增加但是我希望在它被使用了足够次数时限制范围。
是否可以结合类似'和'具有randint()的属性。我已经愚弄了一段时间,但没有想出一些有用的东西。也许我错过了一些显而易见的东西:语法。
例如new_val = randint(old_val,(old_val * 1.1)和!> max_val)
答案 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