实现对多个人在一周的自动排班表,要求每行每列不能有重复的。排好班之后,以excel的形式输出。

  1. 首先输出每行每列不重名的一个矩阵
  2. 统计每个人在一周排班中出现的次数
  3. 将矩阵数据写入excel中并保存
from random import shuffle
from random import sample
import numpy as np
import xlwt
name_list = ['田','兰','刘','杨','余','唐','于','莫','吴','乔','敏','童','杜','王','豆','黄','苹','磊','曼','陈','皱','谢','果','汪','麒']
name_list_size = len(name_list)
print("The are total {} people".format(name_list_size))
def get_matrix():
	while 1:
	    row_1 = sample(name_list, 5)
	    row_2 = sample(name_list, 5)
	    row_3 = sample(name_list, 5)
	    row_4 = sample(name_list, 5)
	    row_5 = sample(name_list, 5)
	    row_6 = sample(name_list, 5)
	    row_7 = sample(name_list, 5)
	    row_8 = sample(name_list, 5)
	    row_9 = sample(name_list, 5)
	    row_10 = sample(name_list, 5)
	#get a matrix for 10x5 array
	    matrix = np.array([row_1,row_2,row_3,row_4,row_5,row_6,row_7,row_8,row_9,row_10])
	    col_1 = matrix[:,0]
	    col_2 = matrix[:,1]
	    col_3 = matrix[:,2]
	    col_4 = matrix[:,3]
	    col_5 = matrix[:,4]
	    set_col_1 = set(col_1)
	    set_col_2 = set(col_2)
	    set_col_3 = set(col_3)
	    set_col_4 = set(col_4)
	    set_col_5 = set(col_5)
		#check whether all people has been in the list
	    unique_list = []
	    for i in range(10):
	        for j in range(5):
	            if matrix[i][j] not in unique_list:
	                unique_list.append(matrix[i][j])
	    #calculate repeated times for every member
	    matrix_list_all_num = []
	    for h in range(10):
	    	for k in range(5):
	    		matrix_list_all_num.append(matrix[h][k])
	    dic = {}
	    for item in unique_list:
	    	dic.update({item: matrix_list_all_num.count(item)})
	    if len(unique_list) == len(name_list) and len(set_col_1) == len(col_1) and len(set_col_2) == len(col_2) and len(set_col_3) == len(col_3) and len(set_col_4) == len(col_4) and len(set_col_5) == len(col_5):
	       #print("Totally calculate", i, "times\n")
	       print("All people are scheduled\n")
	       print(matrix)
	       print("The repeat time for every member\n")
	       print(dic)
	       break
	return matrix
def data_write(file_path, datas):
	book = xlwt.Workbook()
	sheet = book.add_sheet('sheet1', cell_overwrite_ok=True)
	sheet.write(0, 0, '星期一')
	sheet.write(0, 1, '星期二')
	sheet.write(0, 2, '星期三')
	sheet.write(0, 3, '星期四')
	sheet.write(0, 4, '星期五')
	#sheet.write(0, 1, '星期六')
	i = 1
	for data in datas:
		for j in range(len(data)):
			sheet.write(i, j, data[j])
		i = i + 1
	book.save(file_path)
matrix_copy = get_matrix()
book_name_xls = 'schedule_shift.xls'
data_write(book_name_xls, matrix_copy)

version_2

增加了每个人在一个周内排班的总次数到excel中

from random import shuffle
from random import sample
import numpy as np
import xlwt
name_list = ['田','兰','刘','杨','余','唐','于','莫','吴','乔','敏','童','杜','王','豆','黄','苹','磊','曼','陈','皱','谢','果','汪','麒']
name_list_size = len(name_list)
print("The are total {} people".format(name_list_size))
#to convert the name_list to set(name_list)
#unique_list = []
#to store the member to dic
#dic = {}
def get_matrix():
	while 1:
	    row_1 = sample(name_list, 5)
	    row_2 = sample(name_list, 5)
	    row_3 = sample(name_list, 5)
	    row_4 = sample(name_list, 5)
	    row_5 = sample(name_list, 5)
	    row_6 = sample(name_list, 5)
	    row_7 = sample(name_list, 5)
	    row_8 = sample(name_list, 5)
	    row_9 = sample(name_list, 5)
	    row_10 = sample(name_list, 5)
	#get a matrix for 10x5 array
	    matrix = np.array([row_1,row_2,row_3,row_4,row_5,row_6,row_7,row_8,row_9,row_10])
	    col_1 = matrix[:,0]
	    col_2 = matrix[:,1]
	    col_3 = matrix[:,2]
	    col_4 = matrix[:,3]
	    col_5 = matrix[:,4]
	    set_col_1 = set(col_1)
	    set_col_2 = set(col_2)
	    set_col_3 = set(col_3)
	    set_col_4 = set(col_4)
	    set_col_5 = set(col_5)
		#check whether all people has been in the list
	    unique_list = []
	    for i in range(10):
	        for j in range(5):
	            if matrix[i][j] not in unique_list:
	                unique_list.append(matrix[i][j])
	    #calculate repeated times for every member
	    matrix_list_all_num = []
	    for h in range(10):
	    	for k in range(5):
	    		matrix_list_all_num.append(matrix[h][k])
	    dic = {}
	    for item in unique_list:
	    	dic.update({item: matrix_list_all_num.count(item)})
	    #generate the excel to save table
	    book_name_xls = 'schedule_shift.xls'
	    static_key_list = list(dic)
	    static_value_list = list(dic.values())
	    if len(unique_list) == len(name_list) and len(set_col_1) == len(col_1) and len(set_col_2) == len(col_2) and len(set_col_3) == len(col_3) and len(set_col_4) == len(col_4) and len(set_col_5) == len(col_5):
	       print("All people are scheduled\n")
	       print(matrix)
	       #generate the excel
	       book = xlwt.Workbook()
	       sheet = book.add_sheet('sheet', cell_overwrite_ok=True)
	       sheet.write(0, 0, '星期一')
	       sheet.write(0, 1, '星期二')
	       sheet.write(0, 2, '星期三')
	       sheet.write(0, 3, '星期四')
	       sheet.write(0, 4, '星期五')
	       #sheet.write(0, 1, '星期六')
	       i = 1
	       for data in matrix:
	            for j in range(len(data)):
	                sheet.write(i, j, data[j])
	            i = i + 1
	            book.save(book_name_xls)
	       j = 13
	       for item in static_key_list:
	       	sheet.write(j, 0, item)
	       	j = j + 1
	       k = 13
	       for item1 in static_value_list:
	       	sheet.write(k, 1, item1)
	       	k = k + 1
	       book.save(book_name_xls)
	       print('\n')
	       print("The repeat time for every member\n")
	       print(dic)
	       break
	return matrix
get_matrix()
                    文章目录前言解决方案代码实现前言实现对多个人在一周的自动排班表,要求每行每列不能有重复的。排好班之后,以excel的形式输出。解决方案首先输出每行每列不重名的一个矩阵将矩阵数据写入excel中并保存代码实现...
				
Python自动化办公是指利用Python编程语言来实现办公自动化的过程。Python语言具有简单易学、可读性强、功能强大等特点,因此在办公自动化领域得到了广泛应用。 Python自动化办公教程主要包括以下内容: 1. Python基础知识:包括Python语言的基本语法、变量、数据类型、条件语句、循环语句等基础知识。 2. Python操作Excel:包括读取Excel文件、写入Excel文件、操作Excel表格等内容。 3. Python操作Word:包括读取Word文件、写入Word文件、操作Word文档等内容。 4. Python操作PDF:包括读取PDF文件、写入PDF文件、操作PDF文档等内容。 5. Python操作邮件:包括发送邮件、接收邮件、解析邮件等内容。 6. Python操作数据库:包括连接数据库、查询数据、插入数据、更新数据、删除数据等内容。 7. Python操作网络:包括爬虫、网络请求、网络数据解析等内容。 8. Python操作系统:包括文件操作、进程管理、线程管理等内容。
好的,我们可以使用 Python 来写一个班脚本。首先,我们需要定义一些变量来存储班信息,比如每个员工的名字、可以工作的时间段等。 下面是一个简单的例子,假设我们有三个员工,他们的名字分别是 "张三"、"李四" 和 "王五",每个员工都有两个可以工作的时间段,分别是 "上午" 和 "下午"。 # 定义员工信息 employee_1 = {'name': '张三', 'shift_1': '上午...
您好!下面是一个 Python 代码的示例,可以帮助您班,满足您的要求。请注意,这只是一个大致的示例,可能需要根据您的实际情况进行调整和修改。 import itertools import random def schedule(employee_count, hours_per_day, lunch_start, lunch_end, dinner_start, dinner_end, r...
本文件夹为系统源代码,主要完成班功能。 三层模式,包含一个自动班的业务逻辑:按年份自动班,值班员工轮流值班,周六,周日两班;其余每天一班。 数据库脚本在app_data文件夹 ;三层核心在app_code文件夹。 新手可以看一看 只用于学习交流。
本文原文来自:https://rfortherestofus.com/2019/11/how-to-make-beautiful-tables-in-r/ 本文为原文的翻译,如果有什么错误的地方,欢迎各位提出。 如果你没有有效的传递出你的分析结果,这不是你的数据分析能力的原因。大部分报告中,图形、表格、叙事性文字作为传递结果的载体。清晰的写作是另外一个场所的主题,数据可视化是R的一大主题。这个可以在kieran Healy的书中可以看到(https://socviz.co/)或者Claus Wike书中
二分查找是基于有序序列的: 1.先找到中间的位置,把原列表切分成两段 2,比较中间位置和目标的大小,相等直接返回,比目标 大,则到左边部分(想成新列表)找,比目标小,则到右边部分(想成新列表)查找 3.在新的列表重复以上2步 '''非递归''' def binary_search(alist, item): start = 0 end = len(alist)...
可以使用Python来处理班。一种常见的方法是使用pandas库来创建一个包含所有员工和日期的数据框,然后使用条件语句和循环来填充每个员工的班。 例如,可以创建一个包含所有员工和日期的数据框,如下所示: import pandas as pd import datetime start_date = datetime.date(2021, 1, 1) end_date = datetime.date(2021, 1, 31) dates = pd.date_range(start_date, end_date, freq='D') employees = ['Alice', 'Bob', 'Charlie', 'David'] df = pd.DataFrame({'date': dates}) for employee in employees: df[employee] = '' 然后,可以使用条件语句和循环来为每个员工分配班。例如,如果要为每个员工分配每周至少两个工作日和至少一个周末工作日,可以使用以下代码: for index, row in df.iterrows(): date = row['date'].date() for employee in employees: if (date.weekday() < 5 and df.loc[index, employee] != 'Weekend' and df[employee].str.count('Weekday').sum() < 2): df.loc[index, employee] = 'Weekday' elif (date.weekday() >= 5 and df.loc[index, employee] != 'Weekday' and df[employee].str.count('Weekend').sum() < 1): df.loc[index, employee] = 'Weekend' 在这个例子中,我们使用了pandas的iterrows方法来遍历每一行,然后使用条件语句和逻辑运算符来检查每个员工的班情况。如果当前日期是工作日,并且该员工还没有被安在周末工作日,则将该员工安在工作日。同样,如果当前日期是周末,并且该员工还没有被安在工作日,则将该员工安在周末。 最后,可以将结果保存为CSV文件或者其他格式,以便后续处理和分析。 ### 回答2: Python可以用来处理班相关的任务。首先,我们可以使用Python中的日期和时间模块来处理日期和时间的计算。比如,我们可以使用datetime模块来表示和计算具体的日期和时间。 在班中,我们通常需要考虑员工的上班时间、轮班规则等。我们可以使用Python的列表或字典来存储员工的信息,包括姓名、上班时间等。 在编写班算法时,我们可以用条件语句来判断员工的轮班规则,并根据不同的规则来生成班结果。比如,我们可以使用循环来遍历一段时间内的每一天,然后根据轮班规则为每天安不同的员工。 另外,我们还可以使用Python的文件操作来读取和保存班结果。比如,我们可以将生成的班结果保存到一个CSV文件中,方便后续查询和分析。 除了以上方法,使用Python的第三方库也是处理班问题的好选择。比如,Pandas库可以帮助我们更方便地处理日期和时间的计算,同时提供强大的数据分析和处理功能。 总之,Python是一种灵活而强大的编程语言,适用于处理班相关的任务。通过使用Python的日期和时间模块、条件语句、循环等基本语法,我们可以编写出高效的班算法。同时,借助Python的第三方库,我们还可以更加方便地处理和分析班结果。 ### 回答3: Python可以通过编写程序来处理班问题。首先,我们可以使用Python的日期和时间模块来获取当前日期和时间,并对其进行操作。 要处理班,我们需要定义班次和员工列表。可以创建一个二维数组或字典来存储班次和员工的对应关系。例如,可以使用字典,键为日期,值为员工名称。这样,我们就可以轻松地查找某个日期的员工。 接下来,我们可以编写一个函数来选择员工进行班。这个函数可以根据指定的条件(例如员工的偏好或可用时间)从员工列表中选择适当的员工,并返回他们的名称。 然后,我们可以编写主程序来调用这些函数并生成班表。主程序可以循环遍历指定的日期范围,并为每个日期选择合适的员工。然后,可以将选中的员工和对应的日期存储到班表中。 最后,我们可以将班表保存到文件中,以便日后查看或共享。可以使用Python的文件操作功能来创建、写入和读取文件。 Python处理班问题可以帮助我们更好地管理和优化人力资源安。它可以自动班过程,并确保员工按照规定的班次进行工作。此外,我们可以根据需要灵活调整算法和条件,以适应不同的班需求。