我关心的是,怎样才能生成一个10-15个数字的列表,这些数字的和总是可以被n整除。
输出应该是
-8378302799号
这是我目前所得到的,但还不是一个有效的脚本。

import random
import numpy as np

def get_num(x, y, n):
    return [random.choice(range(x, y, n)) if x % n != 0 else random.choice(range(x - (x % n) + n, y, n)) for x in x]


def get_list():
    numb = get_num(0, 9, 2)
    return ''.join(np.random.multinomial(numb, [1/10], size=1))

while True:
    amount = int(input("How many Do you want to generate?" + "\n"))
    for i in range(1,amount):
        get_list()

@Samer Ayoub,答案是我需要的,只是添加了sep='',所以正如我所料。
import random

n, m, k= 3, 9, 14
lis = [random.choice(range(0, m)) for i in range(k)]
tot = sum(lis)
print(*lis, sep = '')

while tot%n != 0:
    tot -= lis.pop()
    last = random.choice(range(0, m))
    lis.append(last)
    tot += last

最佳答案

使用numpy对@SamerAyoub的改进:

import numpy as np

n, m, k= 3, 9, 15
arr = np.empty(k, dtype = int)
arr[1:] = np.random.choice(np.arange(0, m), k-1)
rem = arr[1:].sum() % n
arr[0]  = np.random.choice(np.arange(n - rem, m, n))

print(''.join([str(i) for i in arr]))
print(arr.sum()%n == 0)

374564205252063
True

还有(不能保证特别快,特别是如果n很大)暴力方法,它至少保证没有偏见(但不能保证永远完成):
def slow_way(n, m, k):
    arr = np.empty(k)
    while arr.sum() % n != 0:
        arr = np.random.choice(np.arange(0, m), k)
    return arr

关于python - 生成具有被n整除的随机数列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57954340/

10-12 21:01