如何生成 0 到 1 之间的随机数,同时排除子范围

问题描述 投票:0回答:3

如何生成 0 到 1 之间的随机数,同时排除子范围。例如。从0.2到0.5?

我自己不知道如何做,我花了一些时间试图查找答案,但找不到答案。

python random
3个回答
4
投票

这样你将得到最均匀的分布:

# 0.0     0.2      0.5           1.0
#  |       |XXXXXXXX|             |
# 0.0     0.2            0.7
#  |       |              |

n = random.uniform(0.0, 1.0 - (0.5 - 0.2))
if n >= 0.2: n += (0.5 - 0.2)

0
投票
import random

def random_excluding_subrange(exclude_start, exclude_end):
    # Determine the sizes of the allowed subranges
    lower_size = exclude_start  # [0, exclude_start)
    upper_size = 1 - exclude_end  # (exclude_end, 1]

    # Total size of the allowed ranges
    total_size = lower_size + upper_size

    # Determine whether to generate in the lower or upper subrange
    r = random.uniform(0, total_size)

    # Generate in the lower subrange
    if r < lower_size:
        return r

    # Generate in the upper subrange
    return exclude_end + (r - lower_size)

# Test the function
for _ in range(10):
    print(random_excluding_subrange(0.2, 0.5))

-1
投票

随机导入

def random_excluding_range(exclude_start, exclude_end):
    while True:
        num = random.random()
        if num < exclude_start or num > exclude_end:
            return num

exclude_start = 0.2
exclude_end = 0.5
random_number = random_excluding_range(exclude_start, exclude_end)
print(random_number)
© www.soinside.com 2019 - 2024. All rights reserved.