如何生成 0 到 1 之间的随机数,同时排除子范围。例如。从0.2到0.5?
我自己不知道如何做,我花了一些时间试图查找答案,但找不到答案。
这样你将得到最均匀的分布:
# 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)
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))
随机导入
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)