'''
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. GitHub for Windows离线安装包

    国内安装github客户端,真的很痛!! 偶然找到了离线安装包,感谢作者的资源分享!!! 地址:http://download.csdn.net/download/lyg468088/8723039? ...

  2. Python入门基础之函数、切片

    Python之函数 Python不但能非常灵活地定义函数,而且本身内置了很多有用的函数,可以直接调用. Python之调用函数 Python内置了很多有用的函数,我们可以直接调用. 要调用一个函数,需 ...

  3. 短连接、长连接与keep-alive

    短连接与长连接 通俗来讲,浏览器和服务器每进行一次通信,就建立一次连接,任务结束就中断连接,即短连接.相反地,假如通信结束(如完成了某个HTML文件的信息获取)后保持连接则为长连接.在HTTP/1.0 ...

  4. Testlink1.9.17使用方法(第七章 测试用例集管理)

    第七章 测试用例集管理 QQ交流群:585499566 测试用例准备好以后,可以对测试用例集进行相关的操作. 一. 添加测试用例到测试计划中 在主页的“当前测试计划”下拉列表里-->选择一个测试 ...

  5. Testlink1.9.17使用方法(第一章 前言)

    第一章 前言 QQ交流群:585499566 一.Testlink主要功能: 测试项目管理 测试需求管理 测试用例管理 测试计划的制定 测试用例对测试需求的覆盖管理 测试用例的执行 大量测试数据的度量 ...

  6. 添加用户到sudoers

    ** is not in the sudoersfile.  This incident will bereported.” (用户不在sudoers文件中……) 处理这个问题很简单,但应该先理解其原 ...

  7. Django Admin后台管理用户密码修改

    方法一 在Terminal中执行:python manage.py changepassword your_name(其中“your_name”为你要修改密码的用户名),根据提示内容修改即可. 方法二 ...

  8. [python]函数返回多个return值

    python支持函数直接返回多个变量,具体用法如下: >>> def test(): ... a=2 ... b=3 ... return a,b ... >>> ...

  9. SQL Server @@ERROR的小误区大Bug

    在公司项目中看到有这样使用事务的: -- 开启事务 BEGIN TRAN ) ) BEGIN ROLLBACK TRAN END COMMIT TRAN 乍一看没啥问题,仔细思考就能发现有很大的问题. ...

  10. EF CodeFirst使用Nuget更新数据库

    常用命令: 1.开启迁移 Enable-Migrations -EnableAutomaticMigrations 2.添加一条迁移记录 Add-Migration AddMigration001 3 ...