【发布时间】:2021-11-10 18:45:51
【问题描述】:
我想知道是否有人可以帮助我编写一个更好的程序。我的目标是制作一个随机数生成器,但它有非常具体的参数。我需要找到一个随机数,用于查找房屋组合中单元编号的随机数。参数在 101-112、114-125、128-149、201-230、232-263、265-280 和 300-305 之间。我为每个数字制作了一个列表,然后调用了随机数函数,但我只是想知道是否有更简单或更简洁的方法来制作这个程序。谢谢!
【问题讨论】:
我想知道是否有人可以帮助我编写一个更好的程序。我的目标是制作一个随机数生成器,但它有非常具体的参数。我需要找到一个随机数,用于查找房屋组合中单元编号的随机数。参数在 101-112、114-125、128-149、201-230、232-263、265-280 和 300-305 之间。我为每个数字制作了一个列表,然后调用了随机数函数,但我只是想知道是否有更简单或更简洁的方法来制作这个程序。谢谢!
【问题讨论】:
为了确保您的选择是等概率的,您可以首先在权重等于每个范围中值的数量的范围中进行选择。 random.choices 允许您指定权重。
然后您可以简单地选择所选范围内的任何值:
import random
def random_in_ranges(ranges):
weights = [end - start + 1 for start, end in ranges]
range_ = random.choices(ranges, weights=weights)[0]
return random.randint(*range_)
ranges = [(101,112), (114,125), (128,149), (201,230), (232,263), (265,280), (300,305)]
print(random_in_ranges(ranges))
# 262
【讨论】:
我认为你应该使用
flat_num = random.choise(flats)
如果你的号码在某个 Iterable 结构中
或
如果您只有这样的数字,您可以随机范围然后从选定范围中进行选择:
flat_num = random.randint(
*random.choice(
[(101,112),(114,125),(128,149),(201-230),(232-263),(300-305)]
)
)
【讨论】: