带内存的 Python 随机座位生成器
Posted
技术标签:
【中文标题】带内存的 Python 随机座位生成器【英文标题】:Python Random Seat Generator with Memory 【发布时间】:2015-07-04 02:32:48 【问题描述】:所以我已经搜索了一些与此类似的项目,但还没有遇到任何将我推向正确方向的东西关于如何处理这个项目,所以我来到 Stack 来获取一些建议。我不一定要为这个项目寻找完整的解决方案,因为我想自己解决它,只是简单地寻找一些关于如何处理它的建议。
我要做什么
我正在尝试编写一个程序来随机生成八周课程的座位表。它从一个 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 比较陌生,不知道如何最好地解决这个问题。
提前感谢大家的建议! :)
乔伊
【问题讨论】:
我认为这有两个方面。软件设计和算法。我认为后者是某种着色问题,最好在 Math SE 上讨论。 您或许可以通过随机生成座位安排并检查您的标准来逃脱惩罚。至于读写 Excel 工作表,我对 openpyxl 没有任何经验。如果你对它有任何问题,你可以做我一直做的事情:导出到一个 csv 文件,然后编写 csv 文件并将它们导入到 Excel 中。 另外,这并不是 Stack Overflow 所期望的那种问题。如果您提出单独的更具体的问题,同时保持它们足够笼统,那么您会获得更多的运气;比如如何根据特定标准生成座位安排,或者如何在 Python 中读取/写入 excel 文档等。 excel文件不是必须的,我已经能够读取/写入Excel文件,这很容易。如果这能让事情变得更容易,我什至可以使用 csv 文件,我对实现座位安排的三个标准更感兴趣。感谢您的投入! 一个宿舍有多少学生? 【参考方案1】:这是一种方法:
-
将班级分成两组,使 A 组中没有人和 B 组住在同一个房间(如果所有宿舍组都是 8 人,则可能,否则几乎可能)
将 A 组排成棋盘状,并让他们始终保持座位
将 B 组排成棋盘格,围坐在 A 周围。每节课,将 B 组在短维度移动 3 个座位,在长维度移动一个座位。像圆环一样环绕双向。在重复座位之前,您可以在这里获得正好 8 次,这很方便
【讨论】:
以上是关于带内存的 Python 随机座位生成器的主要内容,如果未能解决你的问题,请参考以下文章