簡體   English   中英

可擴展的偏置數字生成器 - Python

[英]Extensible biased number generator - Python

我試圖獲得一個隨機數生成器,它將偏向於需要一個數字,並打印一個可能接近的數字。 這就是我現在擁有的:

def biasedRandom(rangen, rangex, target, biaslevel=1):
    if rangen > rangex:
        raise ValueError("Min value is less than max value.")
        return
    if not target in range(rangen, rangex):
        raise ValueError("Bias target not inside range of random.")
        return

    num = random.randint(rangen, rangex)
    for i in range(biaslevel):
        distance = abs(num - target)
        num -= random.randint(0, distance)

    return num

這很好用,但它有時會給出完全無恥的數字; 例如,曾經給過-246174068358 (1,100,30,60) 我認為那里只有一個我沒有看到的錯誤。

提前致謝。

raise退出函數 - 你不需要跟隨加注返回

范圍內的目標(lo,hi)是低效的; 為什么不lo <= target <hi?

編輯:

import random
def biasedRandom(lo, hi, target, steps=1):
    if lo >= hi:
        raise ValueError("lo should be less than hi")
    elif target < lo or target >= hi:
        raise ValueError("target not in range(lo, hi)")
    else:
        num = random.randint(lo, hi)
        for i in range(steps):
            num += int(random.random() * (target - num))
        return num

隨着步驟的增加,這將很快收斂到目標; 您可能希望進行一些試驗分發,以確保獲得預期,或嘗試使用random.gauss。

在計算num的最后一行,你是否在想這樣的事情?

    num = abs(num - random.randint(0,distance))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM