Day 21 20190205 老男孩python学习第21天 内容整理

今天写作业,明天后天要在外旅游

 

写作业写了7个小时。

 

  1 def read_file_as_dict(where):
  2     staff_dict = {}
  3     f = open('%s' % where, mode="r+", encoding='utf-8')
  4     data = f.read()
  5     f.close()
  6     row = data.strip().split('\n')
  7     for staff in row:
  8         staff_info = staff.split(',')  # 每一条是这样的: ['1', 'Alex Li', '22', '13651054608', 'IT', '2013-04-01']
  9         staff_dict[staff_info[3]] = staff_info
 10     return staff_dict
 11 
 12 
 13 def save_back_to_file(where):
 14     s = staff_dict.values()
 15     s2 = ''
 16     for staff in s:
 17         for info in staff:
 18             s2 = s2 + info + ','
 19         s2 = s2.rstrip(',') + '\n'
 20     s2.rstrip('\n')
 21 
 22     f = open('%s' % where, mode="w", encoding='utf-8')
 23     f.writelines(s2)
 24     f.close()
 25 
 26 
 27 def find_staff(how):
 28     # 首先先筛选,输出需要打印的员工名单,即在staff_list中的index号
 29     # how[0]为目标比较项,如age,name等,how[1]为比较符,如大于小于等于等等,how[2]为去比较的值,如年龄22,电话号码等
 30     selected_staff = []
 31     if how[0] == 'staff_id' or how[0] == 'age':  # 如果比较的项是员工ID或者年龄这类数字
 32         if how[1] == '>':
 33             for key, value in staff_dict.items():
 34                 if int(value[title_list.index(how[0])]) > int(how[2]):  # 筛选完毕
 35                     selected_staff.append(key)  # 输出符合条件的所有staff的index的列表selected_staff_index
 36             return selected_staff
 37 
 38         elif how[1] == '<':
 39             for key, value in staff_dict.items():
 40                 if int(value[title_list.index(how[0])]) < int(how[2]):  # 筛选完毕
 41                     selected_staff.append(key)
 42             return selected_staff
 43 
 44         elif how[1] == '=':
 45             for key, value in staff_dict.items():
 46                 if int(value[title_list.index(how[0])]) == int(how[2]):  # 筛选完毕
 47                     selected_staff.append(key)
 48             return selected_staff
 49 
 50     elif how[0] == 'enroll_date' and how[1] == 'like':  # 比较入职日期,日期目前只有like+年份的操作
 51         for key, value in staff_dict.items():
 52             if value[title_list.index(how[0])].startswith(how[2]):  # 筛选完毕
 53                 selected_staff.append(key)
 54         return selected_staff
 55 
 56     elif how[0] == 'name' and how[1] == '=':  # 比较姓名
 57         target_name = ' '.join(how[2:])  # 把已经拆分成两个列表元素的姓与名合并起来
 58         for key, value in staff_dict.items():
 59             if value[title_list.index(how[0])] == target_name:  # 筛选完毕
 60                 selected_staff.append(key)
 61         return selected_staff
 62 
 63     elif how[0] in title_list and how[1] == '=':  # 如果条件是除上述以外的项目,如比较电话、部门
 64         for key, value in staff_dict.items():
 65             if value[title_list.index(how[0])] == how[2]:  # 筛选完毕
 66                 selected_staff.append(key)
 67         return selected_staff
 68 
 69     else:
 70         print('对不起,您的输入有误,请重新输入!')
 71 
 72 
 73 def print_info(what, list):  # 如print_info('name,age', [1, 3, 8])或者print_info('*', [1, 3, 8])
 74 
 75     # 首先是识别what参数传入进来需要显示的项目名称,
 76     index_list = []
 77     s = ''
 78     global title_list  # 呼叫全局变量,用作后续对比
 79     subset_flag = True  # 标识符,查看用户输入信息是否合法
 80 
 81     if what == '*':  # 输入为*号,即打印所有信息
 82         index_list = range(len(title_list))
 83 
 84     else:
 85         what = what.split(',')  # 如果传进去what是'age, name'的话,这里就变成了['age', 'name']
 86         for element in what:  # 先看一下用户传入的需打印的title是不是都是可打印的title,与title_list进行匹配
 87             if element in title_list:
 88                 index_list.append(title_list.index(element))  # 将需打印的title在title_list当中的索引做成一个新列表,供打印使用
 89             else:
 90                 subset_flag = False
 91 
 92     if subset_flag:  # 如果没有问题,都是合法的title
 93         for i in selected_staff:  # 将每个要打印的员工循环
 94             for index in index_list:  # 将每个员工的每个要打印的项目循环
 95                 s = s + title_list[index] + ' ' + staff_dict[i][index] + ' '  # 将同一个员工的信息加在同一行
 96 
 97             s = s + '\n'  # 每个员工循环完毕,换行
 98 
 99         print(s)  # 打印全部需要打印的信息
100     else:
101         print('对不起,您的输入有误,请重新输入!')
102 
103 
104 def add_staff(words, staff_dict):
105     new_staff_id = str(len(staff_dict) + 1)  # 新的staff_id就是现有的数量+1,为了后面写数据方便,格式转成字符串
106     r_detailed_info = words[3].split(',')  # 将除了姓以外的所有数据处理,结果如[Li', '25', '134435344', 'IT', '2015-10-29']
107     r_detailed_info[0] = words[2] + ' ' + r_detailed_info[0]  # 将姓氏加上
108     r_detailed_info.insert(0, new_staff_id)  # 插入新的staff_id
109     if r_detailed_info[3] in staff_dict:
110         print('对不起,您想要添加的手机号已经存在,无法重复添加!')
111     else:
112         staff_dict[r_detailed_info[3]] = r_detailed_info  # 将新的员工信息,手机号作为键,所有信息的列表作为值,插入字典
113 
114         save_back_to_file(words[1])
115         print('新员工信息%s,共1条已加入系统' % r_detailed_info)
116 
117 
118 def del_staff(selected_staff, staff_dict):
119     for staff in selected_staff:  # 将查找到的员工信息删除
120         deleted_staff = staff_dict.pop(staff)
121 
122     id_bigger_than_del_list = find_staff(['staff_id', '>', words[6]])  # 删除后只影响它后面的staff_id,需要-1
123     for key in id_bigger_than_del_list:  # 更新staff_id
124         staff_dict[key][0] = str(int(staff_dict[key][0]) - 1)
125 
126     save_back_to_file(words[2])
127     print('老员工信息%s,共1条已删除' % deleted_staff)
128 
129 
130 def update_staff(selected_staff, staff_dict):
131     global title_list
132     for staff in selected_staff:  # 将查找到的员工信息更新
133         staff_dict[staff][title_list.index(words[3])] = words[5]
134     save_back_to_file(words[1])
135     print('所有%s为%s的员工,%s已经变更为%s,共变更%s条' % (words[7], words[9], words[3], words[5], len(selected_staff)))
136 
137 
138 #  --------------------------------------------函数区结束,下面为实现代码区---------------------------------------------
139 title_list = ['staff_id', 'name', 'age', 'phone', 'dept', 'enroll_date']
140 
141 while True:
142     search_instruction = input('please type in your searching instruction:').strip().replace('"', '')
143     words = search_instruction.split(
144         ' ')  # words = ['find', 'name,age', 'from', 'staff_table', 'where', 'age', '>', '22']
145 
146     if words[0] == 'find' and 8 <= len(words) <= 9:  # 命令的第一个字符串识别是哪一类操作,如果为find,开始进行find功能,将关键参数传入函数,函数命令元素一般为8个,查姓名为9个
147 
148         staff_dict = read_file_as_dict(words[3])  # 调用read_file函数读取文档,生成对应的列表文件
149         # 列表类似staff_list = [['1', 'Alex Li', '22', '13651054608', 'IT', '2013-04-01'],
150         # ['2', 'Jack Wang', '28', '13451024608', 'HR', '2015-01-07']]
151 
152         selected_staff = find_staff(words[5:])  # words[5:]为条件str语句的列表['age', '>', '22']
153         #  输出的这个selected_staff的列表内容为[1, 2, 3, 5]等等的被筛选后需要打印信息的员工在staff_list里面的索引
154 
155         # print(selected_staff)
156 
157         print_info(words[1], selected_staff)  # 然后是利用传入进来的list,打印list里每个人的what项目的信息,每人一行
158 
159         print('这条语句查询了%s条' % len(selected_staff))
160 
161     elif words[0] == 'add' and len(
162             words) == 4:  # 姓占1个长度,['add', 'staff_table', 'Alex', 'Li,25,134435344,IT,2015-10-29']
163         staff_dict = read_file_as_dict(words[1])  # 将change_file函数的返回值字典赋予staff_dict
164         add_staff(words, staff_dict)
165 
166     elif words[0] == 'del' and len(words) == 7:  # ['del', 'from', 'staff_table', 'where', 'id', '=', '3'],命令长度为7
167 
168         staff_dict = read_file_as_dict(words[2])
169         words[4] = 'staff_id'  # 将id改为staff_id以配合功能查询
170         selected_staff = find_staff(words[4:])  # 用find_staff功能进行查询
171         if not selected_staff:  # 如果selected_staff值为空,
172             print('对不起,系统没有查询到,请重新查询!')
173         else:  # 如果selected_staff值不为空,
174             del_staff(selected_staff, staff_dict)
175 
176     elif words[0] == 'update' and len(
177             words) == 10:  # 如['update', 'staff_table', 'set', 'dept', '=', 'Market', 'where', 'dept', '=', 'IT']
178         staff_dict = read_file_as_dict(words[1])
179         selected_staff = find_staff(words[7:])
180         if not selected_staff:  # 如果selected_staff值为空,
181             print('对不起,系统没有查询到,请重新查询!')
182         else:  # 如果selected_staff值不为空,
183             update_staff(selected_staff, staff_dict)
184 
185     elif search_instruction == 'q':
186         exit('感谢您的使用,再见!')
187 
188     else:
189         print('对不起,系统无法识别您的命令,请重新输入!')
View Code
staff_table:

1,Alex Li,22,13651054608,IT,2013-04-01
2,Jack Wang,28,13451024608,HR,2015-01-07
3,Rain Wang,21,13451054608,IT,2017-04-01
4,Mack Qiao,44,15653354208,Sales,2016-02-01
5,Rachel Chen,23,13351024606,IT,2013-03-16
6,Eric Liu,19,18531054602,Marketing,2012-12-01
7,Chao Zhang,21,13235324334,Administration,2011-08-08
8,Kevin Chen,22,13151054603,Sales,2013-04-01
9,Shit Wen,20,13351024602,IT,2017-07-03
10,Shanshan Du,26,13698424612,Operation,2017-07-02

转载于:https://www.cnblogs.com/Jack1314/p/10352619.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/248552.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SCOM 简单界面操作指南 [SCOM中文系列之三]

今天大概介绍下SCOM的管理界面&#xff0c;大概分三个重要的功能版块 Monitoring 监控版面 Authoring &#xff08;中文版不知道翻译成什么&#xff0c;主要编辑MP&#xff09; Administration 管理操作 首先说一下管理操作区&#xff0c;开始装好的SCOM都需要来这里配置一下的…

趁着对象泡脚的功夫,我把vueX吃透了

文章目录vueX&#x1f31f;Vuex的概述什么是vuexVuex管理数据的优点&#x1f31f;Vuex的基本使用步骤1.安装 npm i vuex --save2.在src文件目录下新建store>index.js文件3.口文件里面引入store&#xff0c;然后再全局注入4.使用&#x1f31f;Vuex中的核心特性State在组件中访…

【题解】FBI序列

题目描述 两伙外星人策划在未来的XXXX年侵略地球&#xff0c;侵略前自然要交换信息咯&#xff0c;现在&#xff0c;作为全球保卫队队长&#xff0c;你截获了外星人用来交换信息的一段仅由“F”&#xff0c;“B”&#xff0c;“I”&#xff0c;“O”组成的序列。为了保卫地球和平…

vue基础(上篇)

✨有粉丝在私信中联系博主&#xff0c;希望博主能够系统的出一篇关于vue的基础篇\textcolor{blue}{ 有粉丝在私信中联系博主&#xff0c;希望博主能够系统的出一篇关于 vue的基础篇}有粉丝在私信中联系博主&#xff0c;希望博主能够系统的出一篇关于vue的基础篇 ✨ 今天他来了…

depends用于测试程序运行所缺少的文件,可以帮我们很快找到问题

DEPENDS工具和DUMPBIN工具使用阅读目录(Content) 1.Depends2.DUMPBIN2.1 开启CMD2.2 移动目录到C:\Program Files (x86)\Microsoft Visual Studio\VC98\Bin2.3 运行命令:VCVARS32.BAT2.4 下面就可以调用dumpbin.exe命令了在系统部署运行时我们经常发现某个程序在开发机器中可以…

友联

欢迎来到小站友链区&#xff0c;欢迎━(&#xff40;∀)ノ亻!。 ljc20020730学长巨佬_WA自动机珂朵莉最可爱了BLUESKY007雷姆最可爱啦扬子曰他的代码是神奇的lukelin机房最强如果你想要成为chhokmah小站的朋友的话&#xff0c;请你先把小站加入为友链站哟(&#xff3e;&#xf…

vue基础(中篇)

✨有粉丝在私信中联系博主&#xff0c;希望博主能够系统的出一篇关于vue的基础篇\textcolor{blue}{ 有粉丝在私信中联系博主&#xff0c;希望博主能够系统的出一篇关于 vue的基础篇}有粉丝在私信中联系博主&#xff0c;希望博主能够系统的出一篇关于vue的基础篇 ✨ 今天他来了…

DR图像的畸变校正

DR图像容易产生S形、枕形和局部失真的情况&#xff0c;这给医生对图像的判断带来干扰。而且在医学图像的三维重建中&#xff0c;未经校正的图像进行重建&#xff0c;还会带来一定的重影等干扰。因此&#xff0c;畸变校正是DR图像进行后续处理&#xff0c;不得不对待的一个问题。…

vue基础(下篇)

介绍 对vue组件的介绍网上有很多大家可以自行查询 组件 (Component) 是 Vue.js 最强大的功能之一 组件可以扩展 HTML 元素&#xff0c;封装可重用的代 组件注册 全局注册 Vue.component(‘组件名称’, { }) 第1个参数是标签名称&#xff0c;第2个参数是一个选项对象 全局组…

MS17-010漏洞复现

攻击机&#xff1a;192.168.148.132 kali linux2018.2 x64 靶机&#xff1a;192.168.1.129 win7 x64 首先用msfconsole的smb模块扫描&#xff0c;看看是否有漏洞 use auxiliary/scanner/smb/smb_ms17_010 set rhosts 192.168.1.129 &#xff08;目标主机&#xff09; Ho…

转:HTTP协议简介与在python中的使用详解

1. 使用谷歌/火狐浏览器分析 在Web应用中&#xff0c;服务器把网页传给浏览器&#xff0c;实际上就是把网页的HTML代码发送给浏览器&#xff0c;让浏览器显示出来。而浏览器和服务器之间的传输协议是HTTP&#xff0c;所以&#xff1a; HTML是一种用来定义网页的文本&#xff0c…

深受企业青睐的华为云

作为中国经济活力与韧性的重要保障&#xff0c;无数中小企业也在为夺得各自领域的冠军你追我赶。而席卷全球的数字化转型浪潮&#xff0c;则将这场冠军争夺赛推向了关键节点。企业数字化的第一步就是业务云端化&#xff0c;对企业来说云计算是不可或缺的数字底座。上云&#xf…

一个程序员的水平能差到什么程度?

老板觉得公司里都是男的&#xff0c;缺少一点阴柔之气&#xff0c;想平衡一下&#xff0c;正巧当时互金公司倒了一大批&#xff0c;大批简历投到公司&#xff0c;老板以为自己也是技术出身&#xff0c;就招了一个三年工作经验的女程序员&#xff0c;互金出来的&#xff0c;要价…

vue路由详解版一目了然

概念 路由的本质就是一种对应关系&#xff0c;比如说我们在url地址中输入我们要访问的url地址之后&#xff0c;浏览器要去请求这个url地址对应的资源。 那么url地址和真实的资源之间就有一种对应的关系&#xff0c;就是路由。 路由分为前端路由和后端路由 1).后端路由是由服务…

go语言环境搭建

1、windows环境搭建   1、安装go   2、安装goland开发工具包 2、test.go /* 可执行文件&#xff0c;包名必须是main */ package main /* fmt 字符串格式化的包 */ import "fmt"/*main入口函数*/ func main() { fmt.Printf("Hello, world" )} View Code…

vue脚手架基础API全面讲解【内附多个案例】

vscode-插件补充 vue文件代码高亮插件-vscode中安装 代码提示插件-vscode中安装 知识点自测 想学会今天的内容, 先测测这几个会不会 表达式, 变量是什么 new的作用和含义 实例化对象 什么是对象上的, 属性和方法 对象的赋值和取值 this的指向 npm/yarn是什么, package.json干…

Vue 过滤器、计算属性、侦听器 图解版 一目了然

文章目录本篇学习目标1. vue基础1.0_vue基础 v-for更新监测1.1_vue基础_v-for就地更新1.2_vue基础_虚拟dom1.3_vue基础_diff算法情况1: 根元素变了, 删除重建情况2: 根元素没变, 属性改变, 元素复用, 更新属性1.4_vue基础_diff算法-key情况3: 根元素没变, 子元素没变, 元素内容…

Vue自定义指令原来这么简单

本篇学习目标 能够了解组件进阶知识能够掌握自定义指令创建和使用能够完成tabbar案例的开发 1. 组件进阶 1.0 组件进阶 - 动态组件 目标: 多个组件使用同一个挂载点&#xff0c;并动态切换&#xff0c;这就是动态组件 需求: 完成一个注册功能页面, 2个按钮切换, 一个填写注册…

那些被人忽略的Vue导航知识

本篇学习目标 能够了解单页面应用概念和优缺点能够掌握vue-router路由系统使用能够掌握链接导航和编程式导航用法能够掌握路由嵌套和路由守卫能够掌握vant组件库基础使用 1. vue路由简介和基础使用 1.0 什么是路由 目标: 设备和ip的映射关系 目标: 接口和服务的映射关系 目…

passwd命令

-n 在这几天你不能更改密码&#xff01; -x 在n<时间<x在这段时间内你必须修改密码&#xff01; -w 当距离x日期还有w天的时候开始提醒你改密码&#xff01; -i 密码过期i天之后&#xff0c;此密码停用&#xff0c;你也就无法用此密码登陆这个用户了。注意是密码过期之后…