我已经搜索了一些类似的项目,但还没有找到任何能引导我解决这个项目的方向,所以我来到Stack上寻求建议。我并不是在寻找完整的解决方案,而是只是想要一些关于如何处理这个问题的建议。
我的目标
我正在尝试编写一个程序,用于随机生成8周课程的座位表。 它从Excel文件中读取80个姓名,并输出另一个Excel文件,其中包含8个工作表,每个工作表都有一个不同的8x10随机生成的座位表。 看起来很简单吧?
然而,我还有三个附加条件:
- 我希望避免任何一个学生在两周内坐在同一学生旁边(前面、后面或侧面)
- 我不希望任何一个学生在前排或后排连续坐两周
- 这些学生住在宿舍里,我不希望在任何一周中,来自同一房间的学生坐在一起
这是为一个为期8周的MBA班级,我之所以要做这个,是为了让学生们认识新同学,激发新的对话。
目前我已经做了什么
from openpyxl import Workbook, load_workbook
import random
import itertools
load_wb = raw_input('What is the name of the file containing your students?\n')
num_of_weeks = int(raw_input('How many weeks would you like?\n'))
dest_filename = 'seating_chart.xlsx'
students = []
load_wb = load_workbook(load_wb).active
for cell in load_wb.iter_rows():
students.append(cell[0].value)
def make_grid():
#Make the 8 x 10 grid
y_list = list(range(1, 11))
x_list = list(range(1, 9))
grid = []
for y in y_list:
for x in x_list:
grid.append((x,y))
return grid
save_wb = Workbook()
grid = make_grid()
for week in range(num_of_weeks):
week +=1
if week == 1:
ws = save_wb.active
else:
ws = save_wb.create_sheet()
ws.title = 'Week '+str(week)
#Randomly shuffle the students array
random.shuffle(students)
for x, student in itertools.izip(grid, students):
x,y = x
ws.cell(row=x, column=y, value=student)
save_wb.save(filename=dest_filename)
我知道我显然需要存储每个学生每周的座位信息,并在生成随机图表时引用这些信息,但我对Python比较陌生,不确定最佳方法是什么。
提前感谢大家的建议! :)
Joey