因此,我已经搜索了一些与此类似的项目,但还没有发现任何将我推向正确方向的东西,关于如何处理这个项目,所以我来这里 Stack 找一些建议。我不一定要为这个项目寻找完整的解决方案,因为我想自己解决它,只是简单地寻求一些关于如何处理它的建议。
我想做什么
我正在尝试编写一个程序来随机生成八周类(class)的座位表。它从一个 excel 文件中读取 80 个名字的列表并吐出另一个 excel 文件,在这个输出文件中有 8 个工作表,每周一个,每个都有不同的随机生成的 8x10 座位表。简单吧?
我还想达到三个额外的标准,这让这有点令人困惑:
- 我希望避免让任何一名学生连续两周坐在同一名学生旁边(前面、后面或旁边)
- 我也不希望任何一名学生坐在前排或后排超过一个星期
- 这些学生住在一起,我不希望任何一个房间的任何学生在任何一周内都坐在一起
这是一个为期 8 周的 MBA 类(class),我尝试这样做的全部原因是向学生介绍新的同龄人并激发新的对话。
到目前为止我做了什么
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 比较陌生,不确定如何最好地解决这个问题。
提前感谢大家的建议! :)
乔伊
最佳答案
这是一种方法:
- 将全类分成两组,A 组中没有人与 B 组住在同一个房间(如果所有宿舍组都是 8 人,则可能,否则仍然很可能)
- 将 A 组排成棋盘状,并让他们始终保持自己的座位
- 将 B 组安排成棋盘状,围坐在 A 周围。每节课,将 B 组在短维度移动 3 个座位,在长维度移动一个座位。像环面一样环绕两边。在重复座位之前,您正好可以在这里走 8 次,这很方便
关于带内存的 Python 随机座位生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29865247/