Python:从范围(或两个范围)和单个数中获取随机数

Python: get random number from range (or two ranges) and single number

我有一个小脚本,可以从一组范围内为我生成一个随机数,例如: (1-6).

现在我不仅要读取一个范围,还要添加另一个范围或单个数字,例如: ('1-6', '10', '12-17')

到目前为止,我的脚本看起来像这样,"choose_frame_set" 是范围的参数:

def retime_frames():

    # choose frame set from presets
    fr_range = hou.evalParm("choose_frame_set")


    # extract frame range from list into readable string
    fr_sequence = []

    for frames in fr_range.split(','):
        if '-' in frames:
            a, b = frames.split('-')
            a, b = int(a), int(b)
            fr_sequence.extend(range(a, b + 1))
        else:
            a = int(frames)

    # set random frame from frame range
    random_frame = str(random.sample(fr_sequence, 1))

    # replace special characters
    for char in '[]':  
        random_frame = random_frame.replace(char,'')

    hou.parm('retime_frame').set(random_frame)
    print random_frame
    return random_frame

如何添加额外的范围或单个数字,以更好地控制我随机化的数字?

您可以使用选择方法:

from random import choice

def ran(*r):
    num = []
    for n in r:
        num += [m for m in range(n[0],n[1]+1)]
    return choice(num)

print(ran((1,4),(5,7),(12,13)))

所有可能的输出:1,2,3,4,5,6,7,12,13

参考我问题下splash58的评论,解决方法是:

Seems, your code works if change else: a = int(frames) to else:<br> fr_sequence.append(int(frames))