1 回答

TA貢獻1893條經(jīng)驗 獲得超10個贊
計算時下限包括 10 的倍數(shù)range。跳過 while 循環(huán)可確保您不會陷入無限循環(huán)。轉(zhuǎn)換為集合可確保您知道可以獲得什么。
import random
def random_excluding_values(_min, _max, exclude_list, num_of_elems):
lower_bound = round(_min+4, -1)
all_nums = {num for num in range(lower_bound, _max+1, 10)}
exclude_set = set(exclude_list)
valid_choices = all_nums - exclude_set
return random.sample(valid_choices, num_of_elems)
_min = 9
_max = 103
exclude_list = [40,50,60,70]
#valid_list = [10,20,30,80,90,100]
num_elems = 3
for i in range(5):
print(f'run = {i}; result = {random_excluding_values(_min, _max, exclude_list, num_elems)}')
輸出:
run = 0; result = [80, 30, 20]
run = 1; result = [10, 20, 80]
run = 2; result = [10, 80, 30]
run = 3; result = [100, 90, 10]
run = 4; result = [10, 20, 100]
random.sample返回有效數(shù)字集中的選項列表。因此您可以輕松修改以獲得單一號碼。
return random.sample(valid_choices, 1)[0]
添加回答
舉報