Python基础10

今日内容概要

  • 文件内光标移动案例
  • 计算机硬盘修改数据的原理
  • 文件内容修改
  • 函数前戏
  • 函数的语法结构
  • 函数的定义与使用
  • 函数的分类
  • 函数的返回值
  • 函数的参数

今日内容详细

文件内光标移动案例

'''监测文件是否有新加内容 有的话就打印出来'''
import time

with open(r'a.txt', 'rb') as f:
    f.seek(0, 2)  # 0表示偏移0个字节 2表示基于文件末尾
    while True:
        line = f.readline()
        if len(line) == 0:
            # 没有内容
            time.sleep(0.5)
        else:
            print(line.decode('utf8'), end='')

计算机硬盘修改数据的原理

​ 硬盘写数据可以看成是在硬盘上刻字 一旦需要修改中间内容 则需要重新刻字
因为刻过的字不可能从中间再分开

硬盘删除数据的原理

​ 不是直接删除而是改变状态 等待后续数据的覆盖才会被真正的删除

​ 比如: 你和老王去开房,住了一晚(数据写入),然后第二天就退房走了(数据删除),宾馆没有再安排客人入住(标记为空闲),如果想找到你和老王搞基的痕迹,那就再去你们那间房间里找就能找到(删除的数据可以被恢复),等宾馆再安排客人入住了你们的房间,那就再也找不到你们的证据了(数据被覆盖就没有办法恢复了)

文件内容修改的方式

方式1:覆盖写
	with open(r'a.txt', 'r', encoding='utf8') as f:
        data = f.read()
   with open(r'a.txt', 'w', encoding='utf8') as f1:
    	  f1.write(data.replace('jason', 'tony'))

方式2:换地写
	import os
	with open('a.txt', 'r', encoding='utf8') as f, open('a.txt.swap', 'w', encoding='utf8') as f1:
        for line in f:
            f1.write(line.replace('tony', 'kevin'))
'''先在另一个地方写入内容,然后将源文件删除 将新文件命名成源文件'''      
   os.remove('a.txt')   # 删除源文件
	os.rename('a.txt.swap', 'a.txt')  # 重命名文件

函数的前戏

neme_list = ['jason', 'kevin', 'oscar', 'jerry']
统计列表中有多少个数据值
	print(len(name_list))
当len不准使用时需要自己写代码
	count = 0
	for i in name_list:
		count += 1
	print(count)
当统计列表内数据值个数的代码需要在多处使用时就可以使用函数
函数
	相同的代码在不同的位置反复执行
'''相同的代码不是真正一模一样,而是可以通过传入的数据不同而做出不同的改变
'''
	def my_len():
		count = 0
		for i in name_list:
			count += 1
		print(count)
定义好后后续需要使用直接调用
	my_len()
'''
函数相当于是工具(具有一定功能)
	不用函数
		修理工修理器件需要使用锤子 原地打造 用完就扔 下次使用继续原地打造
	用函数
		修理工提前准备好工具 什么时候想用就直接拿出使用
'''

函数的语法结构

# 格式
def 函数名(参数)
	'''函数注释'''
	函数体代码
	return 返回值

# 具体解释
1.def
	定义函数的关键字
2.函数名
	命名等同于变量名,做到见名知意
3.参数
	可有可无 主要是在使用函数的时候规定要不要外界传数据进来
4.函数注释
	类似于工具说明书,解释该函数的作用及使用方法 可写可不写 最好写
5.函数体代码
	是整个函数的核心 主要取决于程序员的编写
6.return
	使用函数之后可以返回给使用者的数据 可有可无

函数的定义与使用

1.函数在定义阶段只检测语法 不执行代码
	def func():
		pass
2.函数在调用阶段才会执行函数体代码
	func()
3.函数必须先定义后调用
4.函数定义使用关键字def函数调用使用函数名加括号
	如果有参数则需要在括号内按照相应的规则传递参数

函数的分类

空函数

函数体代码为空 使用pass或...补全
空函数主要用于项目前期的功能框架搭建
def register():
    pass

无参函数

定义函数的时候括号内没有参数
def func():
    print('我是无参函数')

有参函数

定义函数的时候括号内写参数 调用函数的时候括号内传参数
def func1(a):
    print(a)

函数的返回值

返回值

  • 调用函数之后返回给调用者的结果

获取返回值

变量名 赋值符号 函数的调用
# 示例
def func():
    print('我是函数')
    
res = func()   # 先执行func函数 然后将返回值赋值给变量res
print(res)   # None

函数返回值的多种情况

1.函数体代码中没有return关键字 默认返回None
2.函数体代码中有return关键字 如果后面没有写任何东西还是返回None
3.函数体代码中有return关键字 后面写什么就返回什么
4.函数体代码中有return关键字并且后面有多个数据值 则自动组织成元祖返回
5.函数体代码遇到return会立刻结束

函数的参数

形式参数

  • 在函数定义阶段括号内填写的参数简称形参

实际参数

  • 在函数调用阶段括号内填写的参数简称实参
"""
形参与实参的关系
	形参类似于变量名 在函数定义阶段可以随便写 最好见名知意
	def register(name,pwd):
		pass
	
	实参类似于数据值 在函数调用阶段与形参临时绑定 函数运行结束立刻断开
	register('jason',123)   形参name与jason绑定 形参pwd与123绑定
"""

作业

''函数版注册登录'''


def register():
    '''注册功能'''
    username = input('请输入新用户名:').strip()
    password = input('请输入密码:').strip()
    with open('userinfo.txt', 'a', encoding='utf8') as f:
        f.write(f'{username}|{password}\n')
        print(f'用户{username}注册成功')


def login():
    '''登陆功能'''
    username = input('请输入用户名:').strip()
    password = input('请输入密码:').strip()
    with open('userinfo.txt', 'r', encoding='utf8') as f:
        for line in f:
            true_name, true_pwd = line.strip().split('|')
            if username == true_name and password == true_pwd:
                print('登录成功')
                break
        else:
            print('用户名或密码错误')


def menu():
    '''菜单功能'''
    print('''
        -----------
        1.用户注册
        2.用户登录
        3.退出
        -----------
        ''')


def func():
    '''主体功能'''
    while True:
        menu()
        choice = input('请输入您要执行对应功能的编号:').strip()
        if choice.isdigit():
            if choice == '1':
                register()
            elif choice == '2':
                login()
            elif choice == '3':
                print('欢迎下次使用')
                break
            else:
                print('请输入对应编号')
        else:
            print('请输入数字')


if __name__ == '__main__':
    func()
    
    
    
    
'''函数版员工管理系统'''


def add():
    '''添加员工功能'''
    while True:
        emp_id = input('请输入员工编号:').strip()
        if emp_id.isdigit():
            if emp_id in user_dict:
                print('该员工编号以存在')
                continue
            username = input('请输入员工姓名:').strip()
            age = input('请输入员工年龄:').strip()
            job = input('请输入员工岗位:').strip()
            salary = input('请输入员工薪资:').strip()
            emp_dict = {}
            emp_dict['emp_id'] = emp_id
            emp_dict['name'] = username
            emp_dict['age'] = age
            emp_dict['job'] = job
            emp_dict['salary'] = salary
            user_dict[emp_id] = emp_dict
            print(f'员工{username}信息添加成功')
            break
        else:
            print('请输入数字')


def show():
    '''查看单个员工功能'''
    while True:
        emp_id = input('请输入要查看的员工编号:').strip()
        if emp_id.isdigit():
            if emp_id not in user_dict:
                print('员工编号不存在')
                continue
            else:
                emp_dict = user_dict.get(emp_id)
                print(f'''
                ===================
                编号:{emp_dict.get('emp_id')}
                姓名:{emp_dict.get('name')}
                年龄:{emp_dict.get('age')}
                岗位:{emp_dict.get('job')}
                薪资:{emp_dict.get('salary')}
                ===================
                ''')
                break
        else:
            print('请输入数字')


def show_all():
    '''查看所有员工功能'''
    for i in user_dict.values():
        print(f'''
                ===================
                编号:{i.get('emp_id')}
                姓名:{i.get('name')}
                年龄:{i.get('age')}
                岗位:{i.get('job')}
                薪资:{i.get('salary')}
                ===================
                ''')


def new(a, b, emp_id):
    '''修改员工对应信息'''
    new = input(f'请输入新{b}:').strip()
    new_dict = user_dict.get(emp_id)
    new_dict[a] = new
    user_dict[emp_id] = new_dict
    print('修改成功')


def mod():
    '''修改员工信息功能'''
    while True:
        emp_id = input('请输入要修改的员工编号:').strip()
        if emp_id.isdigit():
            if emp_id not in user_dict:
                print('员工编号不存在')
                continue
            else:
                while True:
                    print('''
                    =========
                    1.姓名
                    2.年龄
                    3.岗位
                    4.薪资
                    5.退出
                    =========
                    ''')
                    mod = input('请输入要修改对应信息的编号').strip()
                    if mod.isdigit():
                        if mod == '1':
                            new('name','姓名', emp_id)
                            continue
                        elif mod == '2':
                            new('age','年龄', emp_id)
                            continue
                        elif mod == '3':
                            new('job','岗位', emp_id)
                            continue
                        elif mod == '4':
                            new('salary', '薪资', emp_id)
                            continue
                        elif mod == '5':
                            break
                        else:
                            print('请输入正确的编号')
                    else:
                        print('请输入数字')
                break
        else:
            print('请输入数字')


def del_emp():
    '''删除员工功能'''
    while True:
        emp_id = input('请输入要删除的员工编号:').strip()
        if emp_id.isdigit():
            if emp_id not in user_dict:
                print('员工编号不存在')
                continue
            else:
                user_dict.pop(emp_id)
                print(f'编号{emp_id}员工删除成功')
                break
        else:
            print('请输入数字')


def menu():
    '''菜单功能'''
    print('''
    ===========员工管理系统===========
            1.添加员工信息
            2.查看单个员工信息
            3.查看所有员工信息
            4.修改员工信息
            5.删除员工信息
            6.退出系统
    ================================
            ''')


def func():
    '''主体功能'''
    while True:
        menu()
        choice = input('请输入要执行的功能编号:').strip()
        if choice.isdigit():
            if choice == '1':
                add()
            elif choice == '2':
                show()
            elif choice == '3':
                show_all()
            elif choice == '4':
                mod()
            elif choice == '5':
                del_emp()
            elif choice == '6':
                print('欢迎下次使用')
                break
            else:
                print('没有对应编号')
        else:
            print('请输入数字')


if __name__ == '__main__':
    user_dict = {}
    func()   


posted @ 2022-10-09 19:40  LZJJJ  阅读(49)  评论(0)    收藏  举报