1、josephu环
30个人在一个破船上,其中有15个教徒和15个非教徒,由于破船无法承载30个人前行,必须随机搞掉15人,于是有人出了一个馊主意,30个人手拉手组成一个环,由某一个人从1开始报数,依次递增,报数为9的人被扔到海里面,然后后续人员接着开始从1报数,依次类推;由于神灵保佑,被扔下的15人均为非教徒,请问着15个教徒最初是站在什么位置的。
josephu=list(range(1,31))
for _ in range(15):
josephu=josephu[9:]+josephu[0:8]
2、计算员工工资收入
员工的信息在配置文件中,配置文件是xml格式,读取信息封装成类,其中采用工厂方法模式,根据员工的职位生成不同的对象,再计算对象的工资。
思考:
1、可以把计算后的工资写入到xml
2、员工信息可以采用json的格式
3、可以先写一个页面录入员工信息,再提交给后台处理
xml如下:路径为filepath = './file/employee.xml'
<?xml version="1.0" encoding="UTF-8"?>
<!--manager\programer\saleman-->
<company name="Dog shit">
<employee>
<name>张飞</name>
<age>20</age>
<position>programer</position>
<time>5</time>
<amount>null</amount>
<salary>null</salary>
</employee>
<employee>
<name>刘备</name>
<age>20</age>
<position>manager</position>
<time>null</time>
<amount>null</amount>
<salary>null</salary>
</employee>
<employee>
<name>关羽</name>
<age>20</age>
<position>saleman</position>
<time>null</time>
<amount>10</amount>
<salary>null</salary>
</employee>
</company>
xml的解析模块如下:
返回值是由员工信息组成的列表,每个员工信息为一个字典
from xml.dom import minidom
def get_attrvalue(node, attrname):
return node.getAttribute(attrname) if node else ''
def get_nodevalue(node, index=0):
return node.childNodes[index].nodeValue if node else ''
def get_xmlnode(node, name):
return node.getElementsByTagName(name) if node else []
def get_xml_data(filepath):
doc = minidom.parse(filepath)
root = doc.documentElement
employee_nodes = get_xmlnode(root, 'employee')
employee_list=[]
for node in employee_nodes:
node_name = get_xmlnode(node, 'name')
node_age = get_xmlnode(node, 'age')
node_position = get_xmlnode(node, 'position')
node_time = get_xmlnode(node, 'time')
node_amount = get_xmlnode(node, 'amount')
node_salary =get_xmlnode(node, 'salary')
employee_name =get_nodevalue(node_name[0])
employee_age = get_nodevalue(node_age[0])
employee_position = get_nodevalue(node_position[0])
employee_time = get_nodevalue(node_time[0])
employee_amount=get_nodevalue(node_amount[0])
employee_salary = get_nodevalue(node_salary[0])
employee = {}
employee['name'] =employee_name
employee['age'] = employee_age
employee['position'] = employee_position
employee['time'] =employee_time
employee['amount'] =employee_amount
employee['salary']= employee_salary
employee_list.append(employee)
return employee_list
工厂方法如下:
分别构建对象,形成对象队列,并打印对象的工资
其实定义的不同的类可以抽象一个抽象类,继承后可以不用写初始化方法
import modules.xmlpraser as XML
# 定义工厂方法
def get_class(p,**param):
if p=="manager":
return Manager(**param)
elif p=="saleman":
return Saleman(**param)
elif p=="programer":
return Programer(**param)
# 定义类
class Manager:
def __init__(self, **param):
for k, v in param.items():
setattr(self, k, v)
def get_salary(self):
self.salary=15000
return self.salary
class Saleman:
def __init__(self, **param):
for k, v in param.items():
setattr(self, k, v)
def get_salary(self):
self.salary=1800+0.05*10000*int(self.amount)
return self.salary
class Programer:
def __init__(self, **param):
for k, v in param.items():
setattr(self, k, v)
def get_salary(self):
self.salary=int(self.time)*22*200
return self.salary
# 获取数据并创建类
filepath = './file/employee.xml'
employee_list=XML.get_xml_data(filepath)
emp_list=[] #用于保存不同的employee对象
for employee in employee_list:
p=employee["position"]
emp=get_class(p,**employee)
emp_list.append(emp)
##打印不同对象的工资
for emp in emp_list:
print(emp.get_salary())
注意:采用不定长参数的时候,不要重复赋值,否则会报错,如下
Traceback (most recent call last):
File "E:/Python/阶段1/pyechart_self_learning/employee.py", line 44, in <module>
emp=get_class(position,**employee)
TypeError: get_class() got multiple values for argument 'position'
网友评论