理论篇
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