第二周周测试题

发布时间 2023-06-04 11:31:44作者: Chimengmeng

第二周周测试题

1.尽可能多的列举python字符串类型操作⽅法(⽅法名称+功能介绍)

.len()

  • 计算字符串的字符长度

.strip()

  • 去除字符串首尾的特殊字符,默认是空格
  • \n

.replace()

  • 替换内容
  • 可以将字符串内的特定内容或字符进行替换

.split()

  • 以特定条件切割字符串
  • 切割字符串后的每个元素以列表形式返回

in/not in

  • 判断一个成员是否在里面,在返回True,否则返回False

.upper()

  • 将字符串中的英文全部转换大写

.lower()

  • 将字符串里面的单词全部转换为小写

切片str[1,3]

  • 顾头不顾尾

2.尽可能多的列举python列表类型操作⽅法(⽅法名称+功能介绍)

.lenz()

  • 计算列表内的元素个数

.pop()

  • 删除元素
  • 默认是删除最后一个元素
  • 可以指定索引进行删除

.append()

  • 添加元素
  • 将元素添加到列表中

.sort()

  • 将列表内的内容进行排序
  • 默认是升序

.reverse()

  • 颠倒列表内的元素顺序

in / not in

  • 成员运算

3.诠释什么是可变类型与不可变类型

(1)可变类型

  • 当值发生了改变,而内存空间地址没有发生改变的类型
  • 例如
    • 字典
    • 列表
    • ....

(2)不可变类型

  • 当值发生改变,而内存地址发生了改变的类型
  • 例如
    • 字符串
    • 元祖

4.什么是队列与堆栈,能否⽤列表模拟⼀下各⾃特征

(1)队列

  • 先进先出
theQueue_list = []
for i in range(1, 5):
    theQueue_list.append(i)
    print(f'这是在模拟队列进去{theQueue_list}')
print(f'这是队列完全进去以后的列表{theQueue_list}')

for l in range(len(theQueue_list)):
    theQueue_list.pop(0)
    print(f'这是队列出去的每个列表{theQueue_list}')

print(f'这是最终的结果{theQueue_list}')

(2)堆栈

  • 先进后出
theStack_list = []
for i in range(1,5):
    theStack_list.append(i)
    print(f'这是在模拟堆栈进去{theStack_list}')
print(f'这是堆栈完全进去以后的列表{theStack_list}')

for l in range(len(theStack_list)):
    theStack_list.pop(-1)
    print(f'这是堆栈出去的每个列表{theStack_list}')

print(f'这是最终的结果{theStack_list}')

5.尽可能多的列举python字典类型操作⽅法(⽅法名称+功能介绍)

.get()

  • 根据键取值

.pop()

  • 删除字典内的元素
  • 默认删除最后一个元素

.popitem()

删除字典内的元素,并将删除的元素返回

.update()

  • 更新字典信息

6.请⽤尽可能完整的语⾔表⽰出元组及其特点

(1)什么是元祖

  • 元祖就是以小括号为标志,其中的元素以逗号隔开的数据类型

(2)特点

  • 元祖内的值不可修改

7.请⽤尽可能完整的语⾔表⽰出集合并说说它所具备的功能

(1)什么是集合

  • 集合就是以大括号为标志,其中的元素以逗号隔开的数据类型
  • 其中只有一个元素时,也要有逗号

(2)特点

  • 集合自带去重功能,可以去掉集合内重复的元素
  • 集合内的元素是无序的

8.什么是字符编码,能否说说他的来龙去脉

(1)什么是字符编码

  • 字符编码就是将人类能看懂的字符转成计算机能看懂的二进制数据的媒介

(2)来龙去脉

  • 一家独大
    • 计算机诞生在美国,当时因为二进制编码太过复杂,于是美国就发明了ASCII码表,其中用英文字符代替一串二进制数据
  • 诸侯割据
    • 随着时代的进步和科技的发展,各国也逐渐产生了属于自己国家的编码表,其中中国的为GBK
  • 一统天下
    • 因为各国之间的编码表错综复杂,兼容性不强,于是万国码(utf-8)诞生

9.字符编码的实际应⽤有哪些

(1)进制文件之间的编码和解码

(2)可以实现二进制和字符串之间的相互转换

(3)兼容万国码,减少了不必要的损失和冲突

10.python中如何操作⽂件

with open(file_path,'w/a/r',encoding='utf-8') as f:
    f.write(data)/f.read()

11.⽂件的读写模式有哪些,各⾃有何特点

操作文件有以下几种模式

  • w模式:
    • 只写模式,如果文件不存在则新建文件,写入内容
    • 如果文件存在,打开文件写入内容,但是是清空后写入内容
  • r模式:
    • 只读模式,打开文件,将文件中的内容读出来
  • a模式:
    • 追加写模式,如果存在文件则继续在文件的末尾继续追加内容
    • 如果文件不存在,则新建文件,写入内容

另外还有两种模式

  • wb模式:
    • 写入二进制数据,将图片/视频等二进制文件进行写入保存成文件
  • rb模式:
    • 读二进制数据,将图片/视频等二进制文件从文件中读出来转成二进制数据

12.⽂件的操作模式有哪些,各⾃有何特点

  • a/w/r见上

13.⽂件常⽤操作⽅法有哪些

.read()

  • 读取所有内容,执行完成后,指针在结尾

.readline()

  • 读取一行内容,光标移动到第二行前面

.readlines()

  • 读取每一行内容,存放到列表内

.write()

  • 一次性写入

.writelines()

  • 逐行写入

.readable()

  • 文件是否可读

.writable()

  • 文件是否可写

14.什么是函数,定义函数的语法结构及各部分含义

(1)什么是函数

  • 函数就是在内存空间中开辟一块内存空间,存放可重复执行的代码块,再用关键字定义变量名指向这块内存空间。由关键字,变量名和函数体组成的可重复执行的代码块

(2)语法结构

def main():
    需要执行的代码
    return 返回值

(3)解析

  • def:函数的关键字
  • main:函数的变量名
  • 需要执行的代码块:想要实现或重复执行的代码
  • return:返回值关键字
  • 返回值:函数体执行后需要返回的结果(可以不写return,如果没有返回值的前提下)

【一】代码实战之编写员⼯管理系统

(1)需求

1. 编写员⼯管理系统
 功能要求:
 1.添加员⼯信息
 提示:编号(不能重复)、姓名、年龄、薪资等
 2.查询特定员⼯
 提示:根据编号查找 展示结构⽤格式化输出美化
 3.修改员⼯薪资
 提示:先根据编号查找之后再修改薪资
 4.查询所有员⼯
 提示:循环⼀⾏⾏展示
 5.删除特定员⼯
 提示:根据编号确定

(2)代码实现

# -*-coding: Utf-8 -*-
# @File : work1 .py
# author: Chimengmeng
# blog_url : https://www.cnblogs.com/dream-ze/
# Time:2023/5/27

'''
1. 编写员⼯管理系统
 功能要求:
 1.添加员⼯信息
 提示:编号(不能重复)、姓名、年龄、薪资等
 2.查询特定员⼯
 提示:根据编号查找 展示结构⽤格式化输出美化
 3.修改员⼯薪资
 提示:先根据编号查找之后再修改薪资
 4.查询所有员⼯
 提示:循环⼀⾏⾏展示
 5.删除特定员⼯
 提示:根据编号确定
'''

# 存放所有员工的信息
work_infos = [{'id': 1, 'name': 1, 'age': 1, 'salary': 1, }, {'id': 2, 'name': 2, 'age': 2, 'salary': 2, }]
# 存放所有员工的编号
id_list = [1, 2]

function_menus = '''
------------ 欢迎使用员工管理系统 ------------
            请根据功能ID进行功能选择
                1.添加员⼯信息
                2.查询特定员⼯
                3.查询所有员⼯
                4.修改员⼯薪资
                5.删除特定员⼯
                6.退出系统

'''


def judge_num(num):
    if num.isdigit():
        return int(num)
    else:
        num = input(f'请再次确认信息:>>>>')
        judge_num(num)


# 返回菜单功能(参数为再次使用的功能)
def back_function(func_name):
    chosen = input('请确认是否继续使用?(y/n)')
    if chosen != 'y' and chosen != 'n':
        back_function(func_name)
    elif chosen == 'y':
        func_name()
    elif chosen == 'n':
        main()


# 添加员工信息
def add_info():
    id = input('请输入你的编号:>>>>')
    if id in id_list:
        print(f'编号已存在,请确认你的编号:>>>>{id}')
        add_info()
    else:
        name = input('请输入你的姓名:>>>>')
        age = input('请输入你的年龄:>>>>')
        # 判断是否为数字
        age = judge_num(age)
        salary = input('请输入你的薪资:>>>>')
        # 判断是否为数字
        salary = judge_num(salary)
        # 构建存储数格式
        info_data = {
            'id': id,
            'name': name,
            'age': age,
            'salary': salary,
        }
        id_list.append(id)
        work_infos.append(info_data)
        back_function(add_info)

# 查找个人信息
def search_work_one():
    id = input('请输入你要查询的编号:>>>>')
    id = judge_num(id)
    if id in id_list:
        for info in work_infos:
            if info['id'] == int(id):
                print(f'''
                已为您找到当前编号的详细信息,信息如下
                编号:{info['id']}
                姓名:{info['name']}
                年龄:{info['age']}
                薪资:{info['salary']}
                ''')
        back_function(search_work_one)
    else:
        print(f'查无此人,请确认你输入的编号是否正确')
        search_work_one()

# 查找所有人的信息
def search_work_all():
    for info in work_infos:
        print(f'''
            已为您找到当前编号的详细信息,信息如下
            编号:{info['id']}
            姓名:{info['name']}
            年龄:{info['age']}
            薪资:{info['salary']}
            ''')
    back_function(search_work_one)

# 按照编号改变个人薪资
def change_work_salary():
    id = input('请输入你需要更改的编号:>>>>')
    id = judge_num(id)
    if id in id_list:
        for info in work_infos:
            if info['id'] == int(id):
                salary = input('请输入你要修改的薪资:>>>>')
                info.update(salary=salary)
                back_function(change_work_salary)
    else:
        print(f'请确认你输入的编号是否正确?')
        change_work_salary()

# 按照编号删除个人信息
def del_work_one():
    id = input('请输入你需要删除的用户信息编号')
    id = judge_num(id)
    i = -1
    for info in work_infos:
        i += 1
        if info['id'] == id:
            a = i
            work_infos.pop(a)
            back_function(del_work_one)


def main():
    print(function_menus)
    operation_id_input = input('请输入功能ID:>>>>')
    operation_id = judge_num(operation_id_input)
    if operation_id == 1:
        add_info()
    elif operation_id == 2:
        search_work_one()
    elif operation_id == 3:
        search_work_all()
    elif operation_id == 4:
        change_work_salary()
    elif operation_id == 5:
        del_work_one()
    elif operation_id == 6:
        pass
    else:
        print('输入了功能ID以外的信息,强制退出系统!')

if __name__ == '__main__':
    main()

【二】代码实战之多用户注册登录

(1)需求

2.基于⽂件实现⽤户注册及登录功能
 普通要求:
 单⽤户模式 并且注册登录功能⽆需整合
 进阶要求:
 单⽤户模式 注册登录功能可循环执⾏
 拔⾼要求:
 多⽤户模式 注册登录功能可循环执⾏

(2)代码

# -*-coding: Utf-8 -*-
# @File : works_login .py
# author: Chimengmeng
# blog_url : https://www.cnblogs.com/dream-ze/
# Time:2023/5/27

'''
2.基于⽂件实现⽤户注册及登录功能
 普通要求:
 单⽤户模式 并且注册登录功能⽆需整合
 进阶要求:
 单⽤户模式 注册登录功能可循环执⾏
 拔⾼要求:
 多⽤户模式 注册登录功能可循环执⾏
'''

'''单⽤户模式 并且注册登录功能⽆需整合'''
import os

file_name = 'userInfos'
if not os.path.exists(file_name):
    os.mkdir(file_name)


def write_user_info(user_info):
    file_path = file_name + '\\' + 'up.text'
    with open(file_path, 'a') as f:
        f.write(user_info)


def get_user_info():
    file_path = file_name + '\\' + 'up.text'
    name_lists = []
    info_lists = []
    with open(file_path, 'r') as info:
        # print(info.readlines())
        for line in info.readlines():
            # print(line.strip('\n').split('&'))
            info_all = line.strip('\n').split('&')
            name_lists.append(info_all[0])
            data = {
                'name': info_all[0],
                'password': info_all[1],
            }
            info_lists.append(data)

    return [name_lists, info_lists]


def register():
    cmd = input('当前是注册功能,请选择是否注册?(y/n):>>>>')
    if cmd == 'y':
        username = input('请输入你的用户名:>>>>')
        password = input('请输入你的密码:>>>>')
        user_info = f'{username}&{password}\n'
        write_user_info(user_info)
    elif cmd == 'n':
        login()
    else:
        print('指令错误,请重新校验!')
        register()


# 返回菜单功能(参数为再次使用的功能)
def back_function(func_name):
    chosen = input('请确认是否继续使用?(y/n)')
    if chosen != 'y' and chosen != 'n':
        back_function(func_name)
    elif chosen == 'y':
        func_name()
    elif chosen == 'n':
        main()


def login():
    name_lists, info_lists = get_user_info()
    name = input('请输入用户名:>>>>')
    if name in name_lists:
        password = input('请输入密码:>>>>')
        i = -1
        a = 0
        for info in info_lists:
            i += 1
            if info['name'] == name:
                a = i
        name_us = info_lists[a]['name']
        password_us = info_lists[a]['password']
        print(name, password)
        if name_us == name and password_us == password:
            print('登陆成功,欢迎使用')
            back_function(login)
        else:
            print('密码错误,请重新输入')
            login()
    else:
        print('用户名不存在,请注册后再登陆!')
        register()


def main():
    login()


if __name__ == '__main__':
    main()