'''
1、 文件a1.txt内容
序号 部门 人数 平均年龄 备注
1 python 30 26 单身狗
2 Linux 26 30 没对象
3 运营部 20 24 女生多
.......
通过代码,将其构建成这种数据类型:
[{'序号':'1','部门':Python,'人数':30,'平均年龄':26,'备注':'单身狗'},......]
'''
# lst = []
# with open("a1.txt", mode="r", encoding="utf-8") as f:
# title_lst = f.readline().strip().split()
# for line in f:
# content_lst = line.strip().split()
# lst.append(dict(zip(title_lst, content_lst)))
#
# print(lst) '''
2、 传入函数的字符串中,[数字]、[字母]、[空格] 以及 [其他]的个数,并返回结果。
'''
# def type_count(s): #方法一 (当用户不输入汉字)
# dic = {"Digit": 0, "Alpha": 0, "Space": 0, "Ether": 0}
# for i in s:
# if i.isdigit():
# dic["Digit"] += 1
# elif i.isspace():
# dic["Space"] += 1
# elif i.isalpha():
# dic["Alpha"] += 1
# else:
# dic["Ether"] += 1
# return dic
#
# print(type_count("azAZ 0189\t\n\r.=")) '''方法二 使用ord获取ascii码的值'''
# def type_count(s):
# dic = {"Digit": 0, "Alpha": 0, "Space": 0, "Ether": 0}
# for i in s:
# i = ord(i)
# if i == 9 or i == 10 or i == 13 or i == 32: #\t \n \r 空格
# dic["Space"] += 1
# elif i >= 48 and i <= 57: #数字0~9
# dic["Digit"] += 1
# elif (i >= 65 and i <= 90) or (i >= 97 and i <= 122): #大小写字母
# dic["Alpha"] += 1
# else:
# dic["Ether"] += 1
# return dic
#
# print(type_count("azAZ 0189\t\n\r.=")) '''
3、 写函数,接收两个数字参数,返回比较大的那个数字。
'''
# def compare(n1, n2):
# return n1 if n1 > n2 else n2 #三目运算
# print(compare(4, 8)) '''
4、 写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容
返回给调用者。
dic = {"k1": "v1v1", "k2": [11,22,33,44]}
PS:字典中的value只能是字符串或列表
'''
# def checkDicVal(dic):
# for k, v in dic.items():
# if len(v) > 2:
# dic[k] = v[:2]
# return dic
#
# dic = {"k1": "v1v1", "k2": [11, 22, 33, 44]}
# print(checkDicVal(dic)) '''
5、 写函数,此函数只接收一个参数且此参数必须是列表数据类型,此函数完成的功能是返回给调用者一
个字典,此字典的键值对为此列表的索引及对应的元素。例如传入的列表为:[11,22,33] 返回的字典为
{0:11,1:22,2:33}。
'''
# def to_dic(lst):
# return dict(zip(range(len(lst)), lst))
#
# print(to_dic([11, 22, 33])) '''方法二'''
# def to_dic(lst):
# return {k: v for k, v in enumerate(lst)}
#
# print(to_dic([11,22,33])) '''
6、 写函数,函数接收四个参数分别是:姓名,性别,年龄,学历。用户通过输入这四个内容,然后将这
四个内容传入到函数中,此函数接收到这四个内容,将内容追加到一个student_msg文件中。
'''
# def entry_info(name, gender, age, edu):
# with open("student_msg", mode="a", encoding="utf-8") as f:
# f.write("%s %s %s %s\n" % (name, gender, age, edu))
#
# entry_info("alex", "男", 30, "本科") '''
7、 对第6题升级:支持用户持续输入,Q或者q退出,性别默认为男,如果遇到女学生,则把性别输入女。
'''
# def entry_info(name, age, edu, gender="男"):
# with open("student_msg", mode="a", encoding="utf-8") as f:
# f.write("%s %s %s %s\n" % (name, gender, age, edu))
#
# while 1:
# username = input("Username (quit Q): ").strip()
# if username.upper() == "Q":
# break
# gender = input("Gender (默认 男): ").strip()
# age = input("Age: ").strip()
# edu = input("Education: ").strip()
# entry_info(username, age, edu) if gender == "" else entry_info(username, age, edu, gender) '''
8、 写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作。
'''
# def edit_fcontent(filename, old, new):
# with open(filename, mode="r", encoding="utf-8") as f1,\
# open("%s.bak" %filename, mode="w", encoding="utf-8") as f2:
# for i in f1:
# f2.write(i.replace(old, new)) if old in i else f2.write(i)
#
# import os
# os.remove(filename)
# os.rename("%s.bak" % filename, filename)
#
# edit_fcontent("student_msg", "女", "男") '''
8、读代码,回答:代码中,打印出来的值a,b,c分别是什么?为什么?
a=10
b=20
def test5(a,b):
print(a,b)
c = test5(b,a)
print(c)
'''
#a = 20 b = 10 c = None
#因为调用函数test5的时候,两个实参名和两个形参名反了,所以,在函数test5内打印的结果就是 20 10
#因为函数test5没有返回值,所以c为None '''
9、 读代码,回答:代码中,打印出来的值a,b,c分别是什么?为什么?
a=10
b=20
def test5(a,b):
a=3
b=5
print(a,b)
c = test5(b,a)
print(c)
'''
#a = 3 b = 5 c = None
#因为打印出来的a和b都是在函数test5内重新声明赋值后的值
#因为函数test5没有返回值,所以c为None '''
10、 写函数,传入函数中多个实参(均为可迭代对象如字符串,列表,元祖,集合等),将每个实参的每个元素依次
添加到函数的动态参数args里面.
例如 传入函数两个参数[1,2,3] (22,33)最终args为(1,2,3,22,33)
'''
# def func(*args):
# print(args)
# func(*[1,2,3], *(22,33)) '''
11、 写函数,传入函数中多个实参(实参均为字典),将每个实参的键值对依次添加到函数的动态参数kwargs
里面.
例如 传入函数两个参数{'name': 'alex'} {'age' :1000}最终kwargs为{‘name’:’alex’ ,‘age’:1000}
'''
# def func(**kwargs):
# print(kwargs)
# func(**{'name': 'alex'}, **{'age' :1000}) '''
12、 下面代码成立么?如果不成立为什么报错?怎么解决?
题目一:
a = 2
def wrapper():
print(a)
wrapper()
题目二:
a = 2
def wrapper():
a += 1
print(a)
wrapper()
题目三:
def wrapper():
a = 1
def inner():
print(a)
inner()
wrapper()
题目四:
def wrapper():
a = 1
def inner():
a += 1
print(a)
inner()
wrapper()
'''
#题目一,成立 '''题目二,不成立,因为a是全局变量,在函数体内没有声明变量a,所以不能改变a的值,解决方法如下:'''
# a = 2
# def wrapper():
# global a
# a += 1
# print(a)
# wrapper() '''题目三,成立'''
# def wrapper():
# a = 1
# def inner():
# print(a)
# inner()
# wrapper() '''题目四,不成立,因为变量a在函数inner内没有声明赋值,可以使用nonlocal解决,代码如下:'''
# def wrapper():
# a = 1
# def inner():
# nonlocal a
# a += 1
# print(a)
# inner()
# wrapper() '''
13、 写函数,接收两个数字参数,将较小的数字返回.
'''
# def return_min(n1, n2):
# return n1 if n1 < n2 else n2 #三目运算
# print(return_min(4, 2)) '''
14、 写函数,接收一个参数(此参数类型必须是可迭代对象),将可迭代对象的每个元素以_’相连接,形成新的字
符串,并返回.
例如 传入的可迭代对象为[1,'老男孩','武sir']返回的结果为1_老男孩_武sir’
'''
# def to_str(*args):
# return "_".join(str(i) for i in args)
#
# print(to_str(*[1,'老男孩','武sir'])) '''
15、 写函数,传入n个数,返回字典{‘max’:最大值,’min’:最小值}
例如:如:min_max(2,5,7,8,4) 返回:{‘max’:8,’min’:2}(此题用到max(),min()内置函数)
'''
# def min_max(*args):
# return {'max': max(args), 'min': min(args)}
# print(min_max(2, 5, 7, 8, 4)) '''
16、 写函数,传入一个参数n,返回n的阶乘
例如:cal(7) 计算7*6*5*4*3*2*1
'''
# def cal(n):
# if n == 0:
# return 1
# elif n < 0:
# return "复数没有参数哦,请传输一个正整数."
# fac = 1
# for i in range(1, n+1):
# fac *= i
# return fac
#
# print(cal(-2)) '''
17、 写函数,返回一个扑克牌列表,里面有52项,每一项是一个元组
例如:[(‘红心’,2),(‘草花’,2), …(‘黑桃’,‘A’)]
'''
# def card():
# num_lst = ["A", 2, 3, 4, 5, 6, 7, 8, 9, 10, "J", "Q", "K"]
# kind_lst = ["红心", "草花", "方块", "黑桃"]
# return list(zip(num_lst*len(kind_lst), kind_lst*len(num_lst)))
#
# print(card()) '''
18、 有如下函数:
def wrapper():
def inner():
print(666)
wrapper()
你可以任意添加代码,用两种或以上的方法,执行inner函数.
'''
# def wrapper(): #方法一
# def inner():
# print(666)
# inner()
# wrapper() '''方法二 函数名可以作为返回值返回'''
# def wrapper():
# def inner():
# print(666)
# return inner
# wrapper()()
'''
HR人力资源管理:
1. 菜单:("查看员工信息", "添加员工信息", "修改员工信息", "删除员工信息", "退出")
2. 添加员工信息:
用户输入员工的基本信息(id, name, birthday, salary, input_time),
将员工信息写入到文件emp.db文件中
3. 修改员工信息:
显示所有员工信息,然后让用户选择要修改的员工的id,然后让用户输入员工的工资,
将员工的工资修改为用户输入的工资,其余内容不做改动
4. 删除员工信息:
显示所有员工信息,然后用户选择要删除的员工id,根据用户输入的id删除该员工的全部信息
5. 查看员工信息:
显示出所有员工的基本信息。 按照这个顺序做可能会容易一点儿: 1, 2, 5, 4, 3
'''
import os file = "emp.db" def printC(str1, color="black"):
'''添加颜色输出
color: red:红色 gre:绿色 yel:黄色
'''
col_type = 30
if color == "red":
col_type = 31
elif color == "gre":
col_type = 32
elif color == "yel":
col_type = 33
print("\033[0;%sm%s\033[0m" % (col_type, str1)) def emp_isexist(id):
'''
判断员工ID是否已存在
:param id:
:return: 存在True, 不存在False
'''
with open(file, "r", encoding="utf-8") as f: # 读员工信息文件
for line in f: # 一行一行读取
if id == line.strip().split()[0]: # 如果id已存在
return True
return False def add_emp_info():
''' 添加员工信息'''
printC("添加员工信息:", "gre")
while 1:
id = input("ID: ").strip()
if not id: # 如果id为空
printC("员工ID不能为空!", "red")
continue
if emp_isexist(id): # 如果ID已存在
printC("员工ID已存在,请重新输入!", "red")
else: # ID不存在,继续往下走
name = input("Name: ").strip()
if not name: # 员工名为空
printC("员工名不能为空!", "red")
continue
bir = input("Birthday(Year-month-day): ").strip()
if not bir: # 出生日期为空
printC("出生日期不能为空!", "red")
continue
salary = input("Salary: ").strip()
if not salary: # 工资为空
printC("工资不能为空!", "red")
continue
input_time = input("Input_time(Year-month-day): ").strip()
if not input_time: # 入职时间为空
printC("入职时间不能为空!", "red")
continue
with open(file, 'a', encoding="utf-8") as f: # 录入员工信息
f.write(f"{id}\t{name}\t{bir}\t{salary}\t{input_time}\n")
printC("员工%s信息录入成功!" % name, "gre")
break def format_str(*args):
'''格式化字符串输出'''
str1 = ""
for item in args:
str1 += format(item, " <10")
return str1 def show_emp_info():
'''查看员工信息'''
printC("员工信息列表:", "gre")
flag = 0 # 记录员工信息是否为空,默认为0
printC(format_str("ID", "Name", "Birthday", "Salary", "Input_time"), "gre")
with open(file, "r", encoding="utf-8") as f: # 读取员工信息
for line in f: # 一行一行循环读取
if line.strip(): # 去掉左右两边的空白
flag += 1 # 代表有员工信息,flag改为1
printC(format_str(*line.strip().split()), "gre") # 显示员工信息
if not flag: # 员工信息为空
printC("暂时没有员工信息!", "red")
else:
return True def upd_emp_info():
'''修改员工信息'''
ret = show_emp_info() # 显示员工信息
if ret:
while 1:
upd_id = input("请输入要修改的用户ID: ").strip()
if emp_isexist(upd_id): # 判断员工ID是否存在
upd_salary = input("请输入员工的工资:").strip()
if not upd_salary: # 工资不能为空
printC("工资不能为空!", "red")
continue
with open(file, "r", encoding="utf-8") as f, \
open(f"{file}-temp", "w", encoding="utf-8") as f2:
for line in f: # 一行一行循环读取
emp_lst = line.strip().split() # 将每个员工信息放入列表
if emp_lst[0] == upd_id: # 找到要修改的员工信息
emp_lst[3] = upd_salary # 修改工资
printC("工资修改成功!", "gre")
f2.write("%s\n" % '\t'.join(emp_lst)) # 将修改后的新信息写入文件副本
os.remove(file) # 删除原文件
os.rename(f"{file}-temp", file) # 将文件副本改为原文件
break
else:
printC("输入错误,员工ID不存在!", "red") def del_emp_info():
'''删除员工信息'''
ret = show_emp_info() # 显示员工信息
if ret:
while 1:
del_id = input("请输入要删除的员工ID: ").strip()
if emp_isexist(del_id): # 判断员工ID是否存在
with open(file, "r", encoding="utf-8") as f, \
open(f"{file}-temp", "w", encoding="utf-8") as f2:
for line in f: # 一行一行循环读取员工信息
if line.strip().split()[0] != del_id: # 不是删除的员工信息
f2.write(line) # 写入文件副本
else:
printC(f"员工ID{del_id}信息删除成功", "gre")
os.remove(file)
os.rename(f"{file}-temp", file)
break
else:
printC("输入错误,员工ID不存在!", "red") while 1:
menu = ("查看员工信息", "添加员工信息", "修改员工信息", "删除员工信息", "退出")
printC("序号\t功能", "yel")
for i, item in enumerate(menu):
printC("%s\t\t%s" % (i+1, item), "yel")
inp = input("请输入功能序号>>>:").strip()
if inp == "1":
show_emp_info()
elif inp == "2":
add_emp_info()
elif inp == "3":
upd_emp_info()
elif inp == "4":
del_emp_info()
elif inp == "5":
printC("退出成功!", "gre")
break
else:
printC("输出错误,功能序号不存在!", "red")
 

python3 练习题 day03的更多相关文章

  1. Python3练习题系列(09)——物以类聚,人以群分

    目标: 用类管理同类事物 解析: 用到“class”的编程语言被称作“Object Oriented Programming(面向对象编程)”语言.首先你需要做出“东西”来,然后你“告诉”这些东西去完 ...

  2. 【Python3练习题 025】 一个数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同

    [Python练习题 025] 一个5位数,判断它是不是回文数.即12321是回文数,个位与万位相同,十位与千位相同 x = input('请输入任意位数的数字:') if x == x[::-1]: ...

  3. 【Python3练习题 009】 打印出所有的“水仙花数”

    # [Python练习题 009] 打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,# 其各位数字立方和等于该数本身.例如:153是一个“水仙花数”,# 因为153=1的三次方+5的三次方+ ...

  4. # 【Python3练习题 004】输入某年某月某日,判断这一天是这一年的第几天?

    # [Python练习题 004]输入某年某月某日,判断这一天是这一年的第几天? # 思路:先判断是否为闰年,这关系到 2 月份的天数.# 之后再根据月份值把前几个月的天数累积加起来,最后再加上个“日 ...

  5. 【Python3练习题 002】企业发放的奖金根据利润提成

    # [Python练习题 002]企业发放的奖金根据利润提成.# 利润(I)低于或等于10万元时,奖金可提10%:利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分, ...

  6. Python3练习题 001:4个数字求不重复的3位数

    #Python练习题 001:4个数字求不重复的3位数#方法一import itertoolsres = [][res.append(i[0]*100 + i[1]*10 + i[2]) for i ...

  7. python3 练习题 day01

    #练习题:'''1.简述变量命名规范'''#变量名由数字.字母.下划线组成#变量名可以字母和下划线开头,不能以数字开头,并且不能全为数字#变量名不能太长,且要有意义#最好使用驼峰或下划线格式命令#变量 ...

  8. Python3练习题系列(10)——项目骨架构建

    目标: 如何创建<项目“骨架”目录> 包含:项目文件布局.自动化测试代码,模组,以及安装脚本. 由于编写一个Python文件可以作为一个模块,一个带__init__.py的目录算一个包. ...

  9. Python3练习题系列(06)——各种符号总结

    Python3中的各种符号总结 1关键字 import keyword print(keyword.kwlist, end='\t') ['False', 'None', 'True', 'and', ...

随机推荐

  1. JS检测浏览器Adobe Reader插件

    Web应用中当我们希望向用户显示pdf文档时候,如果用户安装了Adobe Reader之类的pdf阅读器,就可以直接打开文档在浏览器中显示, 但是,当用户没有安装这类软件的时候,自然是打不开的,为了系 ...

  2. vue-cil和webpack中本地静态图片的路径问题解决方案

    1 本地图片动态绑定img的src属性 一般我们在html中或者vue组件文件中引用图片是这样,这是不需要做特别处理的 我们将图片放入assets中或者重新建立个文件夹img什么的都可以,随意- 但是 ...

  3. C# 利用ZXing.Net来生成条形码和二维码

    本文是利用ZXing.Net在WinForm中生成条形码,二维码的小例子,仅供学习分享使用,如有不足之处,还请指正. 什么是ZXing.Net? ZXing是一个开放源码的,用Java实现的多种格式的 ...

  4. C# 对象持久化

    本文以一个简单的小例子,简述对象持久化的相关知识,仅供学习分享使用,如有不足之处,还请指正. 概述 对象持久化是指将内存中的对象保存到可永久保存的存储设备中(如磁盘)的一种技术. 本文介绍的是除数据库 ...

  5. (其他)window10分盘

    由于thinkpad的一个c盘大概是一个t左右,所以我们先分一下盘.   首先找到计算机管理,然后找磁盘管理,右击比较大的磁盘,压缩卷,大概就压缩一半吧,然后新建简单卷,一直下一步,紧接着就完成了. ...

  6. 在线图片上传、预览、裁切、放大、缩小之 cropbox.js 的应用

    cropbox.js 是一个实现了图像在线剪裁的 jQuery .YUI 插件和 JavaScript 库. 上DEMO: 上传的图片可以使用滚轮放大与缩小当前选择的图片,后点击“裁切”后,在右侧的预 ...

  7. html之css选择器学习

    相关内容: 什么是css选择器 标签选择器 类选择器 id选择器 并集选择器(分组选择器) 交集选择器 后代选择器 子标签选择器 属性选择器 相邻兄弟选择器 伪类选择器 伪元素选择器(伪对象选择器) ...

  8. flask based on tornado

    from flask import Flask from tornado.wsgi import WSGIContainer from tornado.httpserver import HTTPSe ...

  9. springmvc复习笔记----Restful 风格,PathVariable获取 Url实例

    结构 包与之前相同 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi=&qu ...

  10. JavaScript中解决计算精度丢失的问题

    在做项目之前老师就给我们封装好了一个js文件,解决计算中丢失精度的一些函数,直接引用js文件就可以使用. eg: var numA = 0.1; var numB = 0.2; alert( numA ...