带内存的 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 随机座位生成器的主要内容,如果未能解决你的问题,请参考以下文章

python模块PIL-获取带噪点噪线的随机验证码

【Python 】性能优化系列:随机数

python生成26个字母的列表

javascript带范围的随机整数生成

如何使用带循环的种子生成不同的随机数?

Python带权重随机数的简单实现