我是python的初学者,正在开发一个随机团队生成器。我遇到的问题是,我不知道如何让它产生均衡的团队。下面是代码以及示例输出。在
import random
def main():
run = True
while run:
try:
print("Welcome to this group picker, follow the instructions and your groups will be picked.")
groupnum = int(input("How many groups do you want?"))
peoplenum = int(input("How many people are there?"))
print("Okay, assign everyone a number from 0 to", peoplenum - 1, ".")
nums = []
for i in range(0, peoplenum):
nums.append(i)
for i in nums:
print("Number", i, "is in group", random.randint(1, groupnum))
break
except:
print("Error, please follow instructions and enter only numbers.")
break
main()
样本输出:
^{pr2}$
只使用标准库,我会这样解决它:
如果您的人数可以除以您的组数,则所有组的大小将相同,否则第一个
n % g
组将获得一个额外的成员。在例1:
^{pr2}$例2:
解决方案
输出
评论
我同意上面提到的所有解决方案,但我认为大多数解决方案都偏离了原来的代码。在
我试图保持代码的真实性,同时实现所需的缺失部分,以使其按预期运行,并保留原始输出。在
主要的问题是
random.randint
值不能说明一旦给一个人分配了一个组,random.randint
值并不能解释每个组中空间的可用性。在第一步:
^{pr2}$这将创建一个列表
group
和person
,这是它们各自数量的大小。另外,让我们创建group_size
,它将给出每个group
中的person
的数量。在第二步:
这里我们解决的问题是如果我们有
group
的大小不等。这将创建所有大小相等的group
,最后一个group
能够容纳剩余的person
第三步:
现在有趣的部分!这个循环将把}的数量大小减少1。在
person[p]
分配给一个随机的group
,然后将{让我们来分解一下:
我们将对我们分配的全部人口循环
person
。 然后我们选择一个随机的group
来分配person
,但是我们要确保group[r]
有可用空间,while group[r] == 0:
检查以确保有空间。如果没有,则生成一个新的r
,直到我们找到一个有可用空间的随机group
。在最后,我们分配
person[p] = r + 1
,这给了person[p]
一个group
编号(使用r + 1
是为了消除“组0”,因为列表从0开始,而对于表示,我们希望从1开始)。之后,group[r]
的值减少了1,说明空间可用性减少了。在print
语句中,+ 1
同样如此,我们没有把任何人称为“0个人”希望这对你有帮助,我很喜欢做这个!在
问题是随机为每个球员挑选一支球队。由于^{} 产生的值分布相等,因此每个玩家都有相同的机会被分配给任何给定的团队,因此您可以将每个人都放在同一个团队中。在
相反,你应该考虑迭代各个团队,并给它分配一个随机的玩家。在
如果这个想法实施得不好
它将解决问题,但它依赖于调用} 的结果与团队列表混合。在
^{pr2}$remove
来避免重复团队成员。为了避免这种情况,你可以将玩家列表(使其随机)和^{这显然行不通。这是因为当最短的迭代器停止时,zip将停止,在我们的例子中} 实现这样的功能:
groups
。我们想要的是在有球员的情况下重演。我们可以用^{相关问题 更多 >
编程相关推荐