返回最低分数
Returning min score
这是我的代码,它由多个成员组成小组,然后对每个小组进行评分,然后对它们求和以获得本例中 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
所以每个组都会得到一个评分,然后最低分数会显示在底部,有没有办法让我重新打印获得最低分数的组?因为如果我尝试使用 100,000 个,我很难检查每一个以找出它来自哪个组!
我试过了:
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]))
但是这个returns"Generator expression must be parenthesized if not sole argument"为括号运行?
将 run
更改为 return my_groups, score
。
然后改变
min(run(members, n_groups) for _ in range(10))
到
min((run(members, n_groups) for _ in range(10)), key=lambda x:x[1])
这使得 min
return 是整个 (my_groups, score)
元组,但只比较 score
(元组的第二个元素)以找到最小值值。
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))
return my_groups
def get_rating(group):
return len(set(group))
def score(my_groups):
return sum(get_rating(g) for g in my_groups)
best = min(*(run(4, 4) for _ in range(10)),
key=score)
print(best)
print(score(best))
这是我的代码,它由多个成员组成小组,然后对每个小组进行评分,然后对它们求和以获得本例中 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
所以每个组都会得到一个评分,然后最低分数会显示在底部,有没有办法让我重新打印获得最低分数的组?因为如果我尝试使用 100,000 个,我很难检查每一个以找出它来自哪个组!
我试过了:
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]))
但是这个returns"Generator expression must be parenthesized if not sole argument"为括号运行?
将 run
更改为 return my_groups, score
。
然后改变
min(run(members, n_groups) for _ in range(10))
到
min((run(members, n_groups) for _ in range(10)), key=lambda x:x[1])
这使得 min
return 是整个 (my_groups, score)
元组,但只比较 score
(元组的第二个元素)以找到最小值值。
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))
return my_groups
def get_rating(group):
return len(set(group))
def score(my_groups):
return sum(get_rating(g) for g in my_groups)
best = min(*(run(4, 4) for _ in range(10)),
key=score)
print(best)
print(score(best))