带内存的 Python 随机座位生成器

标签 python excel random

因此,我已经搜索了一些与此类似的项目,但还没有发现任何将我推向正确方向的东西,关于如何处理这个项目,所以我来这里 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 比较陌生,不确定如何最好地解决这个问题。

提前感谢大家的建议! :)

乔伊

最佳答案

这是一种方法:

  1. 将全类分成两组,A 组中没有人与 B 组住在同一个房间(如果所有宿舍组都是 8 人,则可能,否则仍然很可能)
  2. 将 A 组排成棋盘状,并让他们始终保持自己的座位
  3. 将 B 组安排成棋盘状,围坐在 A 周围。每节课,将 B 组在短维度移动 3 个座位,在长维度移动一个座位。像环面一样环绕两边。在重复座位之前,您正好可以在这里走 8 次,这很方便

关于带内存的 Python 随机座位生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29865247/

相关文章:

java - 生成 [0,1] 和限制小数之间的 float 随机数

python - matplotlib Python 中的 Cmap

excel - VBA Excel - 在特定文本下划线

excel - Excel 中包含 CJK 字符的单元格的 If 语句

random - 具有 > 64 位种子的伪随机数生成器,用于 52 张纸牌洗牌

javascript - 使用 crypto.generateValues() 生成 0 到 1 的随机数

python - 如何使用函数列表来更新字典列表的值?

python - 在列表中映射字典键值

python - 在循环内递增 for 循环

Excel:在列中搜索指定值,返回同一行不同列中的值