2017-02-27 18 views
0

xとx * 1.1の間でrandint()を使用して値を徐々に増加させる関数を実装したいと思いますが、十分な時間使用されたときに範囲を制限したいと思います。演算子をrandint()で使用する

'と'のようなものをrandint()のプロパティと組み合わせることは可能ですか?私はしばらく騙されましたが、うまくいくものを考え出していません。たぶん私は何か明白なre:syntaxを見逃しています。

例えばnew_val = randint(old_val、(old_val * 1.1)および!> MAX_VAL)

+0

if文を使用できないのはなぜですか? – abccd

+0

これは 'for'ループにありますか?その場合、なぜ値を1.1ずつ乗算することはできませんが、 'randint(int(old_val)、int(old_val * 1.1))'を呼び出すのはなぜですか? – roganjosh

+0

これは役立ちます:http://stackoverflow.com/questions/1301735/counting-python-method-calls-within-another-method – Jacquot

答えて

-1

使用 '分'?...

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 
+1

'random.randint(old_val、old_val * 1.1)'は 'ValueError'です。 'float'引数で' randint'を呼び出すことはできません。 – roganjosh

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 
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)) 

私が望むよりも難しいですが、動作しているようです!

関連する問題