我关心的是,怎样才能生成一个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/