Day31--課后作業(yè)(josephu環(huán)、數(shù)據(jù)封裝)

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'
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,734評(píng)論 18 399
  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 4,017評(píng)論 0 11
  • 周末,下午可以看小丫。心里還是蠻開心的。因?yàn)樵u(píng)審,全員上班,今天下午進(jìn)夜班可以休息三小時(shí)。這個(gè)時(shí)間和看小丫的時(shí)間吻...
    清雅smile閱讀 828評(píng)論 0 1

友情鏈接更多精彩內(nèi)容