Python 3.x 具有某些保证存在的半随机数的生成集

Python 3.x 具有某些保证存在的半随机数的生成集,python-3.x,random,Python 3.x,Random,我试图创建一个Python3脚本,它打印出所有可能的6个数字集,其中4个是固定的(必须出现),但可以出现在6中的任何位置。数字也必须全部在0和9之间 例如,如果“固定”数字是1,2,3,4,则1,2,4,3,5,7是可接受的,1,2,3,3,4,4也是可接受的,但是0,4,3,7,8,2或8,0,5,6,7,8不可打印 到目前为止,我一直试图解决这个问题,但在概念上理解从何处着手时遇到了心理障碍 到目前为止,我尝试使用random.sample,只是显示拾取的数字是否在范围内,但最终确定它不合适

我试图创建一个Python3脚本,它打印出所有可能的6个数字集,其中4个是固定的(必须出现),但可以出现在6中的任何位置。数字也必须全部在0和9之间

例如,如果“固定”数字是
1,2,3,4
,则
1,2,4,3,5,7
是可接受的,
1,2,3,3,4,4
也是可接受的,但是
0,4,3,7,8,2
8,0,5,6,7,8
不可打印

到目前为止,我一直试图解决这个问题,但在概念上理解从何处着手时遇到了心理障碍

到目前为止,我尝试使用random.sample,只是显示拾取的数字是否在范围内,但最终确定它不合适,并且我很可能在这里选错了树。(我意识到下面的方法不是最优的,只是试图得到一个可行的解决方案。这只是我个人用于生成6位数的arma地图坐标,只要它可行,我不太在乎它看起来是什么样子)

随机导入
计数=0
当计数小于4时:
res=随机样本([0,1,2,3,4,5,6,7,8,9],6)
如果[0,0,2,8]在res中:
印刷品(res);
计数+=1

非常感谢您的帮助。

我的解决方案适用于应包含
0,0,2,8
(为此序列指定的权重)的序列。该解可以进一步推广

def generate_sequence(weights):
    return random.choices([0,1,2,3,4,5,6,7,8,9], weights=weights, k=6)

def check_sequence(sequence, check):
    return check(sequence)

def check():
   # TODO: Add your own implementation of sequence checker
   pass

# You could play with weights to generate sequence with higher probability
weights = [4,1,2,1,1,1,1,1,2,1]  
sequence = generate_sequence(weights)

while check_sequence(sequence, check):
    sequence = generate_sequence(weights)

我的解决方案适用于应该包含
0,0,2,8
(为此序列指定的权重)的序列。该解可以进一步推广

def generate_sequence(weights):
    return random.choices([0,1,2,3,4,5,6,7,8,9], weights=weights, k=6)

def check_sequence(sequence, check):
    return check(sequence)

def check():
   # TODO: Add your own implementation of sequence checker
   pass

# You could play with weights to generate sequence with higher probability
weights = [4,1,2,1,1,1,1,1,2,1]  
sequence = generate_sequence(weights)

while check_sequence(sequence, check):
    sequence = generate_sequence(weights)

下面将获取一个固定值的指定列表,确定需要多少额外的随机数并附加这些随机数,然后对列表进行洗牌并返回它

import random

def generate_set(fixed_vals = [1, 2, 3, 4], length = 6, min = 0, max = 9):
    for _ in range(length - len(fixed_vals)):
        fixed_vals.append(random.randint(min, max))
    random.shuffle(fixed_vals)
    return fixed_vals

print(generate_set())  # produces, e.g., [0, 3, 4, 8, 2, 1]

下面将获取一个固定值的指定列表,确定需要多少额外的随机数并附加这些随机数,然后对列表进行洗牌并返回它

import random

def generate_set(fixed_vals = [1, 2, 3, 4], length = 6, min = 0, max = 9):
    for _ in range(length - len(fixed_vals)):
        fixed_vals.append(random.randint(min, max))
    random.shuffle(fixed_vals)
    return fixed_vals

print(generate_set())  # produces, e.g., [0, 3, 4, 8, 2, 1]

不确定,如果这对你有用,但是你可以考虑吗?如何:修正你的4个数字,然后用你最喜欢的RNG生成最后2个。用你最喜欢的洗牌来随机化。order@DmytroChasovskyi既然可以直接完成,为什么要使用接受-拒绝呢?你的问题是你想要一个这样的脚本“打印出所有可能的6组数字[…]“。这就是你想要的,还是你只是想随机生成一些可能的集合?如果你想要所有的,使用<代码>随机模块有点奇怪。不确定,如果这对你有用,但是你可以考虑吗?如何:修复你的4个数字,然后使用你最喜欢的RNG生成最后2个。使用你最喜欢的随机播放将order@DmytroChasovskyi如果可以直接完成,为什么要使用接受-拒绝?你的问题是,你想要一个“打印出所有可能的6个数字集[…]”的脚本。这就是你想要的,还是你只是想随机生成一些可能的集合?如果您想要所有这些,那么使用
random
模块有点奇怪。