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))
我有一个小脚本,可以从一组范围内为我生成一个随机数,例如: (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)
toelse:<br> fr_sequence.append(int(frames))