【问题标题】:Generating set of semi-random numbers with some guaranteed present生成具有一些保证存在的半随机数集
【发布时间】:2019-01-02 06:05:43
【问题描述】:

我正在尝试创建一个 Python 3 脚本,它打印出所有可能的 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,28,0,5,6,7,8 不是也不应该被打印出来。

到目前为止,我已经尝试过解决这个问题,但是在从概念上理解究竟从哪里开始时遇到了心理障碍。

到目前为止,我尝试使用 random.sample,只是显示所选择的数字是否在范围内,但最终确定它不合适,而且我很可能在这里找错了树。 (我意识到下面不是最佳的,只是想得到一个可行的解决方案。这只是供我个人用于生成 6 位 arma 地图坐标,只要它有效,我不会过分关心它的样子)

import random
count = 0
while count < 4:
    res = random.sample([0, 1, 2, 3, 4, 5, 6, 7, 8, 9],  6)
    if [0, 0, 2, 8] in res:
        print(res);
        count += 1

非常感谢任何帮助。

【问题讨论】:

  • 不确定,这是否适合您,但您可以考虑random.choice?
  • 如何:修复你的 4 个号码,然后使用你最喜欢的 RNG 生成最后 2 个号码。
  • 使用你最喜欢的随机播放来随机排序
  • @DmytroChasovskyi 为什么可以直接使用接受拒绝?
  • 您的问题是说您想要一个“打印出 所有 个可能的 6 个数字的集合 [...]”的脚本。这是您想要的,还是只想随机生成 一些 个可能的集合?如果你想要所有这些,使用random 模块有点奇怪。

标签: python-3.x random


【解决方案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]

【讨论】:

    【解决方案2】:

    我的解决方案适用于应该包含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)
    

    【讨论】:

      猜你喜欢
      • 2019-03-30
      • 1970-01-01
      • 1970-01-01
      • 2018-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多