首页 > 其他分享 >第二次周测

第二次周测

时间:2023-02-26 20:12:35浏览次数:30  
标签:username dic 周测 user print 第二次 data id

理论篇

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

# 字符串的内置方法
1.将其他类型转化成字符串类型'''整型、浮点型、列表、字典、元组、集合、布尔值'''
2.索引取值,可以正向取,也可以负向取
3.切片[],顾头不顾尾,步长。第一个参数是起始索引,第二个参数是结束索引,第三个参数是步长(即间隔)。[::-1]指字符串翻转
4.成员运算in和 not in:判断某个子字符串是否在母字符串中,返回布尔值
5.split():切分,按照某个特殊字符把字符串切分开,第一个参数是特殊字符,默认是按照空格切分;第二个参数是切分次数,默认是都切分
'''rsplit():代表从右往左切分'''
6.'''~~sprit()~~,改成:strip()''':移除,移除首尾的特殊字符,默认是移除空格
7.循环
8.lower():把所有字符改成全部小写,
  upper():把所有字符改成全部大写
9.startswith():是否以该字符开始,括号内输入判断的字符,返回布尔值'''区分大小写的'''
  endswith():是否以该字符结尾
10.join():拼接,'@'.join('hello')输出的结果是:h@e@l@l@o'''结果是个字符串'''
11.replace():替换,将旧字符替换成新的字符。第一个参数是旧字符,第二个参数是新字符,第三个参数是替换次数
12.isdigit(),判断字符串是否都是由'''~~整数~~,改成:由纯数字组成'''组成,返回布尔值
13.find():寻找子字符串在母字符串中的位置,返回子字符串第一个字母的索引值,如果没有则返回-1,'''第二个参数,第三个参数用于控制范围'''
   index():与find类似,但是如果没有会报错
14.count():统计子字符串在母字符串中的个数,没有返回0,'''第二个参数,第三个参数用于控制范围'''
15.len():统计字符串中元素的个数
'''
16.格式化输出之format:用{}占位,<1>占位与变量要一一对应,<2>将传入的多个值当作一个列表,用{索引}取值,<3>可以使用{变量}取值
17.center():展示字符串,第一个参数是总宽度,第二个参数是特殊字符,不写默认空格
18.ljust(),rjust():左对齐,右对齐
    第一个参数是总宽度,第二个参数是特殊字符,不写默认空格
19.zfill():只有一个参数是总宽度,字符串右对齐显示,不够用0填充
20.title():每个单词首字母大写
21.captalize():第一个单词的首字母大写
22.swapcase():大小写翻转
'''

2.列表类型操作⽅法(⽅法名称+功能介绍)

# 列表的内置方法
1.类型转换:能够将可变类型转换成列表类型'''凡能被for循环遍历的数据类型都可以传给list()转换成列表类型,除了整型和浮点型'''
2.索引取值:正向取,反向取,
    索引可以改值,索引不存在报错
3.切片[]:顾头不顾尾,步长,l.[::-1]指列表翻转
4.成员运算in和not in
5.len():统计列表中元素的个数
6.循环
# 增加
7.append():在末尾增加元素,'''~~增加一个整体~~,改成:(不管是什么类型的数据,都会当成一个整体元素填进去)'''
8.insert():利用索引,索引存在则修改,'''~~索引不存在则增加~~,改成:索引不存在,增加元素到列表末尾'''
9.extend():两个列表的合并
# 删除
10.del:用索引删除元素,用法:del l[0]
11.romove():直接写需要删除的元素值,返回值是None'''从右往左查找第一个需要删除的元素'''
12.pop():弹出元素,默认弹出最后一位,可以写索引,弹出指定位置元素,弹出的元素可以返回
    
13.reverse():颠倒列表中的元素
14.sort():排序,默认按照从小到大排序,括号内增加参数reverse=True,表示按照从大到小排序
    '''
    排序时列表元素之间必须是相同数据类型,不可混搭,否则报错
    常用的数字类型直接比较大小,但其实,字符串、列表等都可以比较大小,都是依次比较索引对应位置的元素的大小,如果分出大小,则无需比较下一个元素
    '''

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

# 不可变类型
    eg:int,float,str
    数值改变,内存地址也会随之改变
# 可变类型
    eg:list, dict, tuple, set
    内部元素改变,内存地址没有改变

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

# 队列:先进先出
l = []
l.append(11)
l.append(22)
l.append(33)
l.append(44)
print(l)

print(l.pop(0))
print(l.pop(0))
print(l.pop(0))
print(l.pop(0))

# 栈:先进后出
l = []
l.append(11)
l.append(22)
l.append(33)
l.append(44)
print(l)

print(l.pop())
print(l.pop())
print(l.pop())
print(l.pop())

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

# 字典的内置方法
1.类型转换,dict([['name','tony'],['age',18]])必须要写成一组一组的,否则会报错
2.按照key取值,key存在取值,key不存在报错
3.按照key改值,key存在修改,key不存在增加到末尾
4.长度len():统计字典中键值对的个数
5.成员运算in和not in:判断key是否存在
6.三兄弟:
  keys():输出所有的key
  values():输出所有的值
  items():输出所有的键值对
7.循环
8.get():取值,第一个参数写key,存在,输出对应的值,不存在输出None(推荐使用get取值)
    第二个参数写值,key存在输出对应的值,不存在输出写的值,不会改变原字典
9.update():({'kry',value}),key存在则修改,不存在则增加
10.del:删除,用字典的key删除
11.pop():默认最后一位弹出,返回key,
    '''~~可以删除对应key的键值对,返回key~~,  
       改成:删除对应key的键值对,返回值'''
12.popintm():'''~~与pop类似,但会以元组形式返回键值对~~,
  改成:只能删除最后一组键值对,并将删除的键值对以元组形式返回'''

'''
13.fromkeys:会从容器类型中取出每个值当做key,然后与第二个参数的整体组成key:value放到字典中
14.setdefault():增加
    key存在则不做任何修改,并返回已存在key对应的value值,字典不变
    key不存在则新增键值对,并将新增的value返回给字典
'''

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

    元组是用小括号括起来,内部有多个元素,元素与元素之间用逗号隔开,元素可以是任意类型。
    元组内部元素不可以更改,如果是元组内部嵌套可变类型,可变类型内部是可以更改的
    如果元组内部只有一个元素,也要加一个逗号

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

    集合是用大括号括起来,内部有多个元素,元素与元素之间用逗号隔开,内部元素是不可变类型。集合的特点是无序(不可以取值)、去重、关系运算'''集合不能直接取值'''
    如果要更改集合内部的元素,可以先将集合转成列表,在列表中更改或者进行其他操作,再转成集合
    去重的应用:用列表举例,可以将列表转成集合,去掉列表中的重复元素,再转成列表。
    关系运算:,差集-,对称差集^,集合相等==,父集>,子集<
    '''~~交集|,并集&~~,记错了,改成:并集|, 交集&'''
    '''
    记忆方法:(不符合python的逻辑)
        '|':是指分割符,只是单纯的将两个集合分隔开一些,所以是并集
       '&':是and 的符号,表示既要符合集合1,又要符合集合2,所以是交集
    '''

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

  字符编码是记录了人类语言与数据之间的对应关系
  因为计算机只能识别二进制语言,但是我们人类的语言有各种各样,所以为了让计算机能够识别出人类语言,我们定义了一种内部转化机制,将人类语言转成二进制语言

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

1.解决乱码问题
    文本文件使用什么字符编码保存就要用什么字符编码打开
2.不同版本的python解释器字符编码有差异
    python2.x使用ASCII编码
    python3.x使用utf8编码
3.如何让python2.x解释器识别中文
    在模板中添加 :# coding utf8
4.编码与解码
    编码:
        将人类的语言 =>=>=> 计算机语言
        encode()
    解码:
        计算机语言 =>=>=> 人类语言
        decode()

10.python中如何操作⽂件

方式一:
    三步骤:
        1.打开文件 f=open('文件路径','读写模式',encoding='utf-8')
        2.操作文件 print(f.read())
        3.关闭文件 f.close()
方式二:
    with open('文件路径','读写模式',encoding='utf-8') as f:
        print(f.write())  # 自动关闭文件

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

r => read:读模式,只读不写
w => write:写模式,只写,运行后会清空之前的内容在写入
a => append:追加,在文本内容的后面增加数据

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

t: txt操作模式
    1.只能操作文本文件
    2.rt,wt,at,其中的t可以省略
    3.都是以字符为单位
    4.encoding参数必须写
b:binary二进制模式
    1.能够操作文本、音频、视频、图片...
    2.rb,wb,ab,其中b不能省略
    3.是以字节为单位
    4.encoding参数不写

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

1.读方法
    f.read():一次读取全部数据
    f.readline():一次读取一行
    f.readlines():把文件内的一行一行数据组装成列表元素返回,注意末尾的换行符
    f.readable():是否可读
        
 2.写方法:
    f.write():写入全部数据
    f.writelines():把列表中的数据写入文件中,想要换行,元素内部要加上换行符
    f.writable():是否可读  

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

# 函数
    函数就相当与一个工具包,可以提前准备好,方便我们的使用
# 函数语法结构
    def 函数名(参数1,参数2...)
        '''函数体注释'''
        函数体代码
        return  # 函数返回值
    
1.def:(不可省略)用于定义或者说明一个函数
2.函数名:(不可省略)
     相当于变量名,命名规范与变量命名规范一样,见名知意。调用函数是用函数名()的方式,函数名是指向内存地址的
3.参数:(可有可无)'''函数的精髓'''
    是调用一个函数前需要满足的条件
4.函数体注释(可有可无):
    是用来描述函数的作用 '''主要写一些函数功能的介绍,和一些参数的解释'''
5.函数体代码(核心);
    写一系列代码或者循环结构
6.返回值(可有可无):
    一个函数最多只有一个返回值是函数的返回结果

代码实战

1.编写员工管理系统

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

1. 0226自己写的:

def add():
    '''添加员工信息'''
    # 1.先输入员工编号
    user_id = input('user_id:>>>').strip()

    # 2. 判断编号是否存在
    for user_data_dic in user_data_list:
        # 3.字典编号与输入编号是否一致
        if str(user_data_dic.get('user_id')) == user_id:
            print('输入的编号已存在')
            break
    else:
        # 4.输入其他信息
        username = input('username:>>>').strip()
        age = input('age:>>>').strip()
        salary = input('salary:>>>').strip()

        # 5.将数据组装到字典中
        tmp_dic = {}
        tmp_dic['user_id'] = user_id
        tmp_dic['username'] = username
        tmp_dic['age'] = age
        tmp_dic['salary'] = salary

        # 6.把字典放在列表中
        user_data_list.append(tmp_dic)
        print('当前用户%s添加成功' % username)

def feed():
    '''查询特定员⼯'''
    # 1.用户输入要查找的编号
    user_id = input('请输入想要查找的编号:>>>')

    count = 0
    for user_data_dic in user_data_list:
        count += 1
        # 2.与列表中的字典的索引对比,有,输出信息
        if str(user_data_dic.get('user_id')) == user_id:
            tmp_dic = user_data_list[count - 1]
            user_id = tmp_dic['user_id']
            username = tmp_dic['username']
            age = tmp_dic['age']
            salary = tmp_dic['salary']

            print('该用户信息如下:\n'
                  '    user_id:%s\n'
                  '    username:%s\n'
                  '    age:%s\n'
                  '    alary:%s'
                  % (user_id, username, age, salary))
            break
    else:
        print('该编号不存在')

def reverse():
    '''修改员⼯薪资'''
    # 1.用户输入要查找的编号
    user_id = input('请输入想要查找的编号:>>>')

    count = 0
    for user_data_dic in user_data_list:
        count += 1
        # 2.与列表中的字典的索引对比,有,输出信息
        if str(user_data_dic.get('user_id')) == user_id:
            print(user_data_list[count - 1])
            tmp_dic = user_data_list[count - 1]
            salary = input('请重新输入薪资:>>>')
            tmp_dic['salary'] = salary
            print(user_data_list[count - 1])
            break
    else:
        print('该编号不存在')

def delete():
    '''删除特定员工'''

    # 1.用户输入要查找的编号
    user_id = input('请输入想要删除的编号:>>>')

    count = 0
    for user_data_dic in user_data_list:
        count += 1
        # 2.与列表中的字典的索引对比,有,输出信息
        if str(user_data_dic.get('user_id')) == user_id:
            print(user_data_list[count - 1])
            re = input('确定要删除该用户信息吗?yes/no:>>>')
            if re == 'yes':
                user_data_list.pop(count - 1)
                break
            else:
                break
    else:
        print('该编号不存在')

# 定义一个空列表来储存添加的用户数据
user_data_list = []
while True:
    # 1.打印序号加功能,供客户选择
    print('''
        1.添加员工信息
        2.查询特定员工
        3.修改员工工资
        4.查询所有员工
        5.删除特定员工
    ''')

    # 2.接收用户输入的序号
    cmd = input('请输入你选择的编号:>>>').strip()

    # 4.要判断用户输入的数据是否合法
    if not cmd.isdigit():
        print('请输入数字')
        continue

    # 5.判断,根据不同的序号执行不同的功能
    if cmd == '1':
        print('添加员工信息')
        add()
    elif cmd == '2':
        print('查询特定员工')
        feed()
    elif cmd == '3':
        print('修改员工工资')
        reverse()
    elif cmd == '4':
        print('查询所有员工')
        for user_data_dic in user_data_list:
            print(user_data_dic)
    elif cmd == '5':
        print('删除特定员工')
        delete()
    else:
        print('输入数字不合法')

2.0225更改:

# 0225更改,添加员工信息用文件
# 2.提前先建一个空文件
with open(r'e.txt', 'w', encoding='utf-8') as f:
    pass

while True:
    # 1.先输入员工编号
    user_id = input('user_id:>>>').strip()

    # 3.将文件中的信息读出来,判断编号是否已经存在
    # 注意:如果要用文件,一定要提前建好文件,不然会报错
    with open(r'e.txt', 'r', encoding='utf-8') as f1:
        for line in f1:
            # 3.1解压赋值把编号分出来
            real_id, *a = line.split(',', 1)
            # 3.2 判断编号是否已经存在
            if real_id == user_id:
                print('该编号已经存在,请重新输入')
                break
        else:
            # 3.3否则,输入其他信息
            username = input('username:>>>').strip()
            age = input('age:>>>').strip()
            salary = input('salary:>>>').strip()

            # 4.将信息组装成固定格式
            info = '%s,%s,%s,%s\n' % (user_id, username, age, salary)

            # 5.把用户数据保存到文件中
            with open(r'e.txt', 'a', encoding='utf-8') as f:
                f.write(info)
            print('当前用户%s添加成功' % username)

2.基于⽂件实现⽤户注册及登录功能

1. 0226自己写的:

单⽤户模式 注册登录功能可循环执⾏

# 注册功能
while True:
    # 1. 接收用户名和密码
    username = input('username>>>:')
    password = input('password>>>:')

    # 2. 组织用户名和密码成固定格式
    data = '%s|%s\n' % (username, password)

    # 3. 把用户数据保存到文件中
    with open('info.txt', 'a', encoding='utf-8') as f:
        f.write(data)

    print('%s: 注册成功' % username)
       
# 登录功能
while True:
    # 1. 接收用户输入的用户名和密码
    username = input('username>>>:')
    password = input('password>>>:')
    # 2. 读取文件
    with open('info.txt', 'r', encoding='utf-8') as f:
        for line in f:
            # 拆分
            real_username, real_password = line.split('|')  # ['kevin', '123']
            # 进行判断
            if username == real_username and real_password.strip() == password:
                print('登录成功')
                break
        else:
            print('登录失败')

多⽤户模式 注册登录功能可循环执⾏

while True:
    print("""
        1. 注册
        2. 登录
    """)

    cmd = input('请输入你的选择:').strip()

    # cmd的验证
    if cmd == '1':
        while True:
            # 1. 接收用户名和密码
            username = input('username>>>:')
            password = input('password>>>:')

            # 3. 判断用户是否已经注册过
            # 3.1 先取出文件中得数据
            with open('info.txt', 'r', encoding='utf-8') as f1:
                # 3.2 把文件数据一行一行的读出来
                for line in f1:
                    real_username, *_ = line.split('|')
                    if real_username == username:
                        print('该用户已经存在,请从新输入')
                        break
                else:
                    # 2. 组织用户名和密码成固定格式 kevin|123
                    data = '%s|%s\n' % (username, password)

                    # 3. 把用户数据保存到文件中
                    with open('userinfo.txt', 'a', encoding='utf-8') as f:
                        f.write(data)
                    print('%s: 注册成功' % username)
                    break
    elif cmd == '2':
        username = input('username>>>:')
        password = input('password>>>:')

        # 2. 读取文件数据,得到用户的真实用户名和密码
        with open('info.txt', 'r', encoding='utf-8') as f:
            # 一行一行的读取用户名和密码
            for line in f:
                real_username, real_pwd = line.split('|')  # ['kevin', '123\n']
                real = real_pwd.strip('\n')
                # 判断用户名和密码是否正确
                if real_username == username and real == password:
                    print('登录成功')
                    break
            else:
                print('登录失败')

标签:username,dic,周测,user,print,第二次,data,id
From: https://www.cnblogs.com/zjyao/p/17157506.html

相关文章