1、josephu環(huán)
30個(gè)人在一個(gè)破船上,其中有15個(gè)教徒和15個(gè)非教徒,由于破船無法承載30個(gè)人前行,必須隨機(jī)搞掉15人,于是有人出了一個(gè)餿主意,30個(gè)人手拉手組成一個(gè)環(huán),由某一個(gè)人從1開始報(bào)數(shù),依次遞增,報(bào)數(shù)為9的人被扔到海里面,然后后續(xù)人員接著開始從1報(bào)數(shù),依次類推;由于神靈保佑,被扔下的15人均為非教徒,請(qǐng)問著15個(gè)教徒最初是站在什么位置的。
josephu=list(range(1,31))
for _ in range(15):
josephu=josephu[9:]+josephu[0:8]
2、計(jì)算員工工資收入
員工的信息在配置文件中,配置文件是xml格式,讀取信息封裝成類,其中采用工廠方法模式,根據(jù)員工的職位生成不同的對(duì)象,再計(jì)算對(duì)象的工資。
思考:
1、可以把計(jì)算后的工資寫入到xml
2、員工信息可以采用json的格式
3、可以先寫一個(gè)頁面錄入員工信息,再提交給后臺(tái)處理
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>關(guān)羽</name>
<age>20</age>
<position>saleman</position>
<time>null</time>
<amount>10</amount>
<salary>null</salary>
</employee>
</company>
xml的解析模塊如下:
返回值是由員工信息組成的列表,每個(gè)員工信息為一個(gè)字典
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
工廠方法如下:
分別構(gòu)建對(duì)象,形成對(duì)象隊(duì)列,并打印對(duì)象的工資
其實(shí)定義的不同的類可以抽象一個(gè)抽象類,繼承后可以不用寫初始化方法
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
# 獲取數(shù)據(jù)并創(chuàng)建類
filepath = './file/employee.xml'
employee_list=XML.get_xml_data(filepath)
emp_list=[] #用于保存不同的employee對(duì)象
for employee in employee_list:
p=employee["position"]
emp=get_class(p,**employee)
emp_list.append(emp)
##打印不同對(duì)象的工資
for emp in emp_list:
print(emp.get_salary())
注意:采用不定長參數(shù)的時(shí)候,不要重復(fù)賦值,否則會(huì)報(bào)錯(cuò),如下
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'