通过lis中的值随机生成人群

2024-05-20 23:24:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个程序,随机生成组,为我正在组织的办公室拾荒者狩猎,所以我写了一个简单的代码,以模拟从帽子中挑选名字,但只是更加公平,但不确切地确定为什么它不起作用,它不会返回所有的名字,例如,我在列表中输入了6个名称,但它只返回其中的4个,如下所示:

Group 1 consists of;
Chris
Ryan
Paul
Group 2 consists of;
Alex

我没有太多从列表中删除元素的经验,所以很可能是我做错了。任何见解都会有帮助。在

^{pr2}$

Tags: of代码程序名称列表公平group名字
3条回答

这取决于列表的类型。代码有问题

for participant in participants:

而是使用

for participant in participants[:]:

尽管pylangs' answer就足够了,但这是另一种解决问题的方法:

import random
members = 3
participants=["Alex","Elsie","Elise","Kimani","Ryan","Chris","Paul"]
random.shuffle(participants)
for i in range(len(participants) // members + 1):
    print('Group {} consists of:'.format(i + 1))
    group = participants[i*members:i*members + members]
    for participant in group:
        print(participant)

这个问题正在发生变化,因为这个列表正在发生变化。解决这个问题有几个选择。一个需要对现有代码和思维过程进行少量修改的选项是对列表的一个副本进行变异,例如,participants[:]生成一个副本。在

使用您的代码:

import random
participants=["Alex","Elsie","Elise","Kimani","Ryan","Chris","Paul"]
group=1
membersInGroup=3

for participant in participants[:]:               # only modification
    if membersInGroup==3:
        print("Group {} consists of;".format(group))
        membersInGroup=0
        group+=1
    person=random.choice(participants)
    print(person)
    membersInGroup+=1
    participants.remove(str(person))

样本输出:

^{pr2}$

相关问题 更多 >