我正在尝试制作一个随机的组生成器,将一个学生列表分成n个几乎相等的分区(例如,如果有11个学生和三个组,我们想要两组四个和一组三个)。我们需要为x个作业重复此过程。我们从文件中读取学生名单,然后从文件中读取小组。这是我到目前为止的代码:

import csv
import unittest
def studentgenerator(num_asmt, num_stud, student_list,
assignment_teams):
    with open(student_list , "r") as student:
        list_students = csv.reader(student)

    student_groups = []

    for x in range (0, num_asmt):
        random.shuffle(list_students)
        div = len(list_students)/float(num_stud)


        for x in xrange(num_stud):
            student_groups = lst[int(round(div * x)): int(round(div *
            (x + 1))]\
   for group in student_groups:
        with open(assignment_teams, "w") as team:
            list_assignment_groups = csv.writer(team)
            list_assignment_groups.writerow(group)



student_list.close()
assignment-teams.close()


我似乎无法使分区程序按照我想要的方式工作,而且我认为从文件中读/写出了一些问题,但是我不确定我到底在做什么错。

最佳答案

您可以定义一个分块器来为您进行拆分。实际上,这是一个真正的“发电机”。由@Ned Batchelder提供(在此处进行投票)。

import random

def chunks(l, n):
    """Yield successive n-sized chunks from l."""
    for i in range(0, len(l), n):
        yield l[i:i + n]

n = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K']

random.shuffle(n)

list(chunks(n, 3))
# [['B', 'H', 'G'], ['D', 'A', 'C'], ['E', 'F', 'I'], ['J', 'K']]

09-03 18:08