根据先前的结果生成随机结果

Generating random result based on previous result

我想根据之前的结果生成带有权重的随机结果。

我按以下方式生成具有权重的随机结果

a = [1, 2, 3, 4, 5, 6]
results = random.choices(a, weights=(
    (10, 20, 30, 30, 10, 6)), k=100)

print (results[0:100]

我想做的是如果results[n] = 1,下一个结果不能是6(即可以在1到5之间)。 我是这个页面的新手 python。任何帮助都是有用的

使用Kelly Bundy的评论建议:

a = [1, 2, 3, 4, 5, 6]
choices = random.choices(a, weights=(10, 20, 30, 30, 10, 6), k=100)
# print(choices)
for i, (prev, curr) in enumerate(zip(choices[:-1], choices[1:])):
    if prev == 1 and curr == 6:
        # print(f'Rerolled {i + 1}') 
        choices[i + 1] = random.choices(a, weights=(10, 20, 30, 30, 10, 0), k=1)[0]
print(choices)

示例输出:

[5, 4, 4, 1, 3, 4, 5, 6, 3, 4, 1, 2, 4, 2, 4, 3, 1, 3, 2, 3, 1, 2, 5, 4, 4, 3, 6, 4, 3, 4, 1, 5, 1, 3, 1, 3, 2, 1, 3, 4, 2, 4, 4, 1, 5, 2, 4, 4, 4, 6, 3, 3, 3, 2, 1, 4, 2, 2, 5, 4, 4, 2, 2, 4, 1, 3, 4, 4, 5, 4, 4, 4, 4, 3, 1, 4, 3, 4, 4, 4, 4, 4, 4, 2, 3, 5, 3, 2, 4, 4, 1, 2, 5, 6, 3, 4, 4, 6, 4, 3]

如果之前的选择是1,你可以把6对应的权重改成0来做下一个选择:

a = [1, 2, 3, 4, 5, 6]
choices = []
k = 100
i = 0
previous_choice_1 = False
while i < k:
    if previous_choice_1:
        choice = random.choices(a, weights=(10, 20, 30, 30, 10, 0), k=1)[0]
    else:
        choice = random.choices(a, weights=(10, 20, 30, 30, 10, 6), k=1)[0]
    choices.append(choice)
    previous_choice_1 = choice == 1
    i += 1
print(choices)

示例输出:

[6, 3, 3, 6, 2, 3, 3, 1, 2, 3, 6, 1, 2, 2, 6, 4, 3, 3, 2, 2, 1, 2, 3, 4, 4, 3, 2, 5, 4, 4, 3, 3, 4, 3, 3, 3, 1, 4, 5, 1, 2, 4, 4, 2, 4, 3, 4, 3, 6, 4, 1, 5, 3, 4, 4, 2, 4, 3, 4, 3, 3, 4, 3, 2, 2, 2, 3, 4, 3, 2, 1, 4, 4, 3, 3, 1, 3, 4, 5, 4, 4, 3, 1, 2, 2, 6, 3, 2, 3, 3, 4, 2, 1, 2, 4, 3, 3, 3, 1, 4]