這是我的代碼,它可以從多個成員中創建分組,然後對每個分組進行評分,然後對它們進行評分,以獲得這種情況下4個分組的總分。返回分數
import random
def run(members, n_groups):
participants = list(range(1,members+1))*n_groups
random.shuffle(participants)
my_groups = list(zip(*[iter(participants)]*members))
print(my_groups)
def get_rating(group):
return (len(set(group)))
score = ((sum(get_rating(g) for g in my_groups)))
print(score)
return score
members = 4
n_groups = 4
print(min(run(members, n_groups) for _ in range(10)))
輸出:
[(3, 3, 4, 1), (4, 2, 3, 1), (2, 3, 2, 4), (1, 1, 4, 2)]
13
[(3, 1, 1, 4), (2, 3, 2, 4), (1, 4, 1, 2), (3, 2, 4, 3)]
12
[(2, 4, 4, 1), (3, 3, 1, 3), (3, 1, 2, 2), (4, 4, 2, 1)]
11
[(3, 1, 4, 1), (3, 1, 2, 1), (2, 2, 4, 4), (3, 2, 3, 4)]
11
[(1, 1, 3, 1), (2, 2, 3, 1), (3, 2, 4, 4), (4, 4, 3, 2)]
11
[(3, 2, 1, 2), (4, 1, 3, 4), (4, 2, 3, 1), (1, 2, 4, 3)]
14
[(2, 4, 3, 1), (3, 4, 4, 2), (1, 1, 2, 1), (3, 3, 4, 2)]
12
[(3, 3, 1, 2), (2, 1, 3, 3), (2, 4, 4, 2), (4, 1, 1, 4)]
10
[(1, 4, 3, 2), (4, 2, 3, 3), (3, 1, 2, 1), (4, 4, 1, 2)]
13
[(2, 4, 1, 3), (3, 2, 2, 3), (1, 4, 1, 3), (1, 4, 2, 4)]
12
10
所以每個組得到一個等級,然後最小分數顯示在底部,有沒有我可以重印得到了分鐘得分後組的方法嗎?因爲如果我嘗試了10萬次,我很難檢查每一個來找出它來自哪個組。
我想:
import random
def run(my_groups, score):
participants = list(range(1,members+1))*n_groups
random.shuffle(participants)
my_groups = list(zip(*[iter(participants)]*members))
print(my_groups)
def get_rating(group):
return (len(set(group)))
score = ((sum(get_rating(g) for g in my_groups)))
print(score)
return score
members = 4
n_groups = 4
print(min(run(members, n_groups) for _ in range(10), key=lambda x:x[1]))
但這種回報「發電機表達必須如果不是唯一的參數括號」,用於運行支架?
所以你想跟蹤哪個組產生最小的分數? –
Yeh so the end:for this case,10 then [(3,3,1,2),(2,1,3,3),(2,4,4,2),(4,1,1 ,4)],它來自的組 – Xenon