我对编码很陌生,所以如果这是一个明显的问题,我道歉。我试图创建一些代码,将创建一个符合某些约束的12项长序列的数字:
1.每个数字重复相同的次数
1.没有单个数字重复(不能有1-1)
1.没有数字对重复(不能有1-2后跟1-2)
我曾在2017年尝试过解决一个二阶条件问题(Second Order Sequence in python),但我无法让它工作。下面是我编辑的代码:
from random import choice
def second_order_random(k,SOC):
n0 = choice(range(1,k+1))
yield n0
n1 = choice(range(1,k+1))
yield n1
while True:
(n0,n1) = (n1,choice(SOC[(n0,n1)]))
yield n1
# dictionary defining valid sequences
SOC = {
(1, 2):(3, 4),
(1, 2):(4, 3),
(1, 3):(2, 4),
(1, 3):(4, 2),
(1, 4):(2, 3),
(1, 4):(3, 2),
(2, 1):(3, 4),
(2, 1):(4, 3),
(2, 3):(1, 4),
(2, 3):(4, 1),
(2, 4):(1, 3),
(2, 4):(3, 1),
(3, 1):(2, 4),
(3, 1):(4, 2),
(3, 2):(1, 4),
(3, 2):(4, 1),
(3, 4):(1, 2),
(3, 4):(2, 1),
(4, 1):(2, 3),
(4, 1):(3, 2),
(4, 2):(1, 3),
(4, 2):(3, 1),
(4, 3):(1, 2),
(4, 3):(2, 1)
}
for n in second_order_random(4, SOC):
print(n)
字符串
如果我尝试用任何值替换'k'(我尝试4来尝试并遵循这个例子),我会得到一个“SyntaxError:Invalid syntax”输出,否则它什么也不做。
1条答案
按热度按时间db2dz4w81#
你没有说你想使用多少个数字,但是对于12个数字,最小值显然是3。这里有一个简单的回溯算法,它为“下一个”数字创建一个候选列表,排除那些违反要求的数字,并尝试填充列表的其余部分。如果失败,它会回溯并选择下一个可能的候选:
字符串