Day31--课后作业(josephu环、数据封装)

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'
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,192评论 6 511
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,858评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,517评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,148评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,162评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,905评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,537评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,439评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,956评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,083评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,218评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,899评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,565评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,093评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,201评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,539评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,215评论 2 358

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,654评论 18 399
  • 一. Java基础部分.................................................
    wy_sure阅读 3,812评论 0 11
  • 周末,下午可以看小丫。心里还是蛮开心的。因为评审,全员上班,今天下午进夜班可以休息三小时。这个时间和看小丫的时间吻...
    清雅smile阅读 681评论 0 1