Psy*_*rad 0 python random algorithm
我有6个测试题,我想随机化,以及正确的答案.问题#1和#2,#3和#4,#5和#6属于同一类型.为了不让测试太容易,我不希望连续显示#1和#2(#3和#4,或#5和#6).
为此,我想我应该[1, 2, 3, 4, 5, 6]
用这个约束来改变列表:1和2,3和4,5和6 不相邻.例如,[ 1,2,4,6,3,5]是不能接受的,因为1和2是彼此相邻的.然后,我想将新订单应用于问题列表和答案列表.
作为编程新手,我只知道如何在没有约束的情况下对列表进行混洗,如下所示:
question = [1, 3, 5, 2, 4, 6]
answer = ['G', 'Y', 'G', 'R', 'Y', 'R']
order = list(zip(question, answer))
random.shuffle(order)
question, answer = zip(*order)
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激!
这是一种"蛮力"的方法.它只是重复洗牌,直到找到有效的排序:
import random
def is_valid(sequence):
similar_pairs = [(1, 2), (3, 4), (5, 6)]
return all(
abs(sequence.index(a) - sequence.index(b)) != 1
for a, b in similar_pairs
)
sequence = list(range(1, 7))
while not is_valid(sequence):
random.shuffle(sequence)
print(sequence)
# One output: [6, 2, 4, 5, 3, 1]
Run Code Online (Sandbox Code Playgroud)
对于输入这么小,这很好.(计算机很快.)对于更长的输入,你需要考虑做一些更高效的事情,但听起来你是在采用一种简单的实用方法,而不是理论上最优的方法.
归档时间: |
|
查看次数: |
157 次 |
最近记录: |