6.27内容整理和概述
6.27内容整理和概述
上次作业回顾
第一题:
基于字符串充当数据库完成用户登录(基础练习):
data_source = 'jason|123' # 一个用户数据
获取用户用户名和密码 将上述数据拆分校验用户信息是否正确
本人代码:
data_source = 'jason|123'
data = data_source.split('|',maxsplit=1) # 1
name = data[0] # 2
password = data[1] # 3
name_client = input("请输入id")
password_client = input("请输入密码")
if name == name_client and password == password_client:
print("登录成功")
else: print("账号或者密码错误")
Jason代码:
data_source = 'jason|123'
username = input('username>>>:').strip()
password = input('password>>>:').strip()
real_name, real_pwd = data_source.split('|')
if username == real_name and password == real_pwd:
print('登录成功')
else:
print('用户名或密码错误')
思考:
1. 我的代码1,2,3标志行完全可以用一行代码编辑,直接使用切割+解压赋值。但是当数据类型多的时候,分割有限时,我的这个写法可能要好一点。
第二题:
基于列表充当数据库完成用户登录(拔高练习) # 多个用户数据
data_source = ['jason|123', 'kevin|321','oscar|222']
本人代码:
j=0 # 6
name_client = input("请输入id")
password_client = input("请输入密码")
data_source = ['jason|123','kevin|321','oscar|222']
k = len(data_source) # 1
for i in range(k): # 2
data = data_source[i].split('|',maxsplit=1) # 3
name = data[0] # 4
password = data[1] # 5
if name == name_client and password == password_client:
print("登录成功")
break
else: j += 1
if j>=k: # 7
print("登录失败") # 8
Jason代码:
data_source = ['jason|123', 'kevin|321','oscar|222']
data_source = ['jason|123', 'kevin|321', 'oscar|222']
username = input('username>>>:').strip()
password = input('password>>>:').strip()
for data in data_source:
real_name, real_pwd = data.split('|')
if username == real_name and password == real_pwd:
print('登录成功')
break
else:
print('用户名或密码错误')
思考:
1.我的代码1,2标识行,完全没必要换成int和range进行for循环,可以直接换成for data in data_source: 因为for循环支持遍历列表,字符串,元组,集合,字典。还是对for循环理解不够通透,导致了一些多余的代码。
2.跟上题一样3,4,5可以直接采用切割+解压赋值的方法,不多说了。
3.代码6,7,8行,可以直接替换成else+for循环,效果:循环体按照提前定义好的条件正常结束,则会执行,没必要用到计数器。之前忽视它的作用,学到了,学到了。
今日内容概述
内容概要
- 列表内置方法
- 字典内置方法
- 元组内置方法
- 集合内置方法
- 可变类型与不可变类型
列表内置方法
"""注意:列表在调用内置方法之后不会产生新的值,而是修改的自身"""
关键字:list()
类型转换:字符串型,元组型,集合型,字典型
方法:
1..索引取值 eg:L(i)
正方向从0开始,从左到右
负方向从-1开始,从右到左
2.切片操作(间隔/方向):s1[ i , j , k ]
" i "正数代表取值从左到右的开始位置,负数代表取值从右到左的开始位置
" j "正数代表取值从左到右的结束位置,负数代表取值从右到左的结束位置
" k "正负代表切片方向,大小代表步长
3.统计列表数据值个数
实现方法:len(),eg:l1 = ['jason', 'kevin', 'oscar', 'tony']
4.增删改查之增:
4.1 append():可以在列表尾部添加一个任意类型的数据
结构:列表.append(数据)
4.2 insert():可以在列表任意位置插入一个任意类型的数据
结构:列表.insert(索引,数据)
4.3 extend():将两个列表相结合形成一个列表
结构:列表.extend(被加列表)
引申:另一种扩展:列表+列表
5.增删改查之查:
5.1:即使方法1的索引取值
5.2:index():查看数据在列表的索引值
结构:列表.index(数据)
ps:当index方法找不到数据时,报错
6.增删改查之删:
6.1 del:删除索引部分或者整个列表
结构:del 列表[索引值] / del 列表
6.2 remove():称为“指名道姓”删除
结构:列表.remove(数据值)
6.3 pop():取出来,再删除
结构:列表.pop(索引值)
Ps:当pop()方法没有索引值时,默认取出列表尾部数据值
7.增删改查之改:
7.1 结构:列表[索引] = 需要改的数据
8.统计数据值出现的次数:
实现方法:列表.count(需统计的数据)
9.排序:
实现方法:
1.升序:列表.sort()
2.降序:列表.sort(reverse=True)
10.翻转:
实现方法:列表.reverse() #前后颠倒
11.比较运算: #输出布尔型值
1.当数据类型为int类型或者布尔型时,按照位置顺序比对
2.不同类型之间默认无法比较
3.还有一些字符编码的东西,暂时不需要了解
元组内置方法
关键字:tuple()
类型转换:字符串型,元组型,集合型,字典型,列表
"注意":当元组内只有一个数据值的时候 逗号不能省略.如果省略了 那么括号里面 是什么数据类型就是什么数据类型
方法:
1.索引取值:元组[索引值]
2.统计元组内数据值的个数:len(元组)
"切记":元组的索引不能改变绑定的地址
eg:
t1 = (11, 22, 33, [11, 22])
t1[-1].append(33)
print(t1) # (11, 22, 33, [11, 22, 33])
字典内置方法
关键字:dict()
类型转换:字典很少涉及到类型转换 都是直接定义使用
"特例":
print(dict([('name', 'jason'), ('pwd', 123)]))
print(dict(name='jason', pwd=123))
方法:
1.取值:get(key,"键不纯在时,返回什么,默认为None")
补充:字典[key] #不推荐使用 键不存在会直接报错
2.统计字典中键值对的个数:len(字典)
3.修改数据:字典[key] = 需要修改的数据
4.新增数据:字典[一个不存在的key] = 数据
5.删除数据:
1.del 字典[key]
2.字典.pop(key)
3.字典.popitem() # 随机删除
6.快速获取键 值 键值对数据
1.字典.keys() #获取字典所有的k值 结果当成是列表
2.字典.values() #获取字典所有的v值 结果当成是列表
3.字典.items() #获取字典kv键值对数据 组织成列表套元组
7.快速构造字典
eg: dict.fromkeys([1, 2, 3], None) #给的值默认情况下所有的键都用一个
8.设置默认v值:eg:字典.setdefault('username', 'jasonNB')
#键存在则获取键对应的值 键不存在则设置 并返回设置的新值
相关细节:
1.字典内k:v键值对是无序的
2.K是对V的描述性性质的信息一般是字符串
3.K其实只要是不可变类型都可以
集合内置方法
关键字:set()
类型转换:字符串型,元组型,集合型,字典型,列表
方法:
1.自带效果:去重+自动排序
eg:s1 = {1, 2, 12, 3, 2, 3, 2, 3, 2, 3, 4, 3, 4, 5, 4, 5, 4, 5, 4, 5, 4}
输出:{1, 2, 3, 4, 5, 12}
2.取双方共同数据:字典 & 字典
3.取一方独有数据:字典 - 字典
4.取双方所有数据:字典 | 字典
5.取双方独有数据:字典 ^ 字典
6.父子集:字典 > 字典 # 输出布尔型
相关细节:
1.数据必须是不可变类型
2.定义空集合需要使用关键字才可以
可变和不可变类型
可变类型:值改变(内置方法) 内存地址可以不变
哪些:
1.字典
2.列表
3.集合
不可变类型:值改变(内置方法) 内存地址肯定变
哪些:
1.字符串
2.整型
3.浮点型
4.布尔型
5.元组
今日作业
第一题:
利用列表编写一个员工姓名管理系统
list_staff = []
print("欢迎使用本系统")
print("输入0退出系统")
print("输入1执行添加用户名功能")
print("输入2执行查看所有用户名功能")
print("输入3执行删除指定用户名功能")
while True:
order = input("请输入数字指令:")
if order.isdigit() == True:
if int(order) == 0:
print("已退出系统")
break
if int(order) == 1:
new_name = input("请输入新的用户名:")
list_staff.append(new_name)
print("新用户添加成功")
if int(order) == 2:
print(list_staff)
if int(order) == 3:
del_name = input("请输入需要删除的用户名:")
list_staff.remove(del_name)
print("用户删除成功")
else:
print("指令类型错误")
第二题:
去重下列列表并保留数据值原来的顺序
l1 = [2,3,2,1,2,3,2,3,4,3,4,3,2,3,5,6,5]
第一种:
list = []
l1 = [2,3,2,1,2,3,2,3,4,3,4,3,2,3,5,6,5]
for i in l1:
if list.count(i) == 0:
list.append(i)
else:
print(list)
第二种:
list_fin = []
l1 = [2,3,2,1,2,3,2,3,4,3,4,3,2,3,5,6,5]
list = list(set(l1))
flag = True
while flag == True:
min = len(l1)
if len(list) == 0:
break
for i in list:
if l1.index(i) < min:
min = l1.index(i)
else:
t = l1[min]
list_fin.append(t)
print(list_fin)
list.remove(t)
print(list)
print(list_fin)
第三题:
有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合
pythons={'jason','oscar','kevin','ricky','gangdan','biubiu'}
linuxs={'kermit','tony','gangdan'}
print(pythons & linuxs)
print(pythons | linuxs)
print(pythons - linuxs)
print(pythons ^ linuxs)

浙公网安备 33010602011771号