我想创建随机 20 个 15 位数字的列表,每个 15 位数字必须遵循 1 条规则。
规则是我希望这个15位数字由5个3位数字组成,其中第一个数字+第二个数字=第三个数字或者如果前两个数字的总和大于10那么第三个数字必须是,等于前两位数字之和的第二位数字。例如,如果第一位数字是 5,第二位数字是 8,则第三位数字必须是 3,因为 5 + 8 = 13。
我已经编写了使用相同规则用 15 位数字填充列表的代码,但它仅适用于前三位数字。
import random as rd
def numchoose(start, end):
arr=[]
num=0
while num<20:
a=(rd.randint(start, end))
if int(str(a)[0]) + int(str(a)[1]) == int(str(a)[2]):
arr.append(a)
num+=1
elif int(str(a)[0]) + int(str(a)[1]) > 10 and int(str(a)[2]) == int(str(int(str(a)[0]) +
int(str(a)[1]))[1]) :
arr.append(a)
num+=1
else: continue
print(numchoose(100000000000000, 999999999999999))
如何编写此代码,以便整个 15 位数字由遵循规定规则的 3 位数字组成,并且前三位数字不是唯一遵循规则的数字?
import random as rd
def numchoose(len):
number = ""
for i in range(int(len/3)):
a = rd.randint(0, 9)
while i == 0 and a == 0:
a = rd.randint(0, 9)
b = rd.randint(0, 9)
c = a + b
if c >= 10:
c -= 10
number += str(a) + str(b) + str(c)
return int(number)
print(numchoose(15))
import random
def NumberGen(Length):
Number = ""
for X in range(int(Length // 3)):
A = random.randint(0, 9)
## To drop leading zero's:
## if X == 0 and A == 0:
## A = random.randint(1, 9)
B = random.randint(0, 9)
C = A + B
if C > 9:
C -= 10
Number += str(A) + str(B) + str(C)
return Number
print(NumberGen(15))
我希望这能回答你的问题
three_digit_combos = []
for first_digit in range(10):
for second_digit in range(10):
third_digit = (first_digit + second_digit) % 10
combo = first_digit * 100 + second_digit * 10 + third_digit
three_digit_combos.append(combo)
def numchoose(num_digits):
assert(num_digits % 3 == 0)
num = random.choice(three_digit_combos[10:]) # first choice can't start with 0
for i in range(1, num_digits // 3):
num = num * 1000 + random.choice(three_digit_combos)
return num