1.字符串
1.1字符串的输入输出
输入:input()---->所有input()输入的都是字符串类型
输出:print()
'''
字符串
'''
s1 = 'hello'
s2 = s1
s3 = 'hello'
s4 = 'hello1'
print(s1, s2, s3)
print(id(s1)) # id():获取内存地址
print(id(s2))
print(id(s3))
print(id(s4))
print(s1 is s2) # is:比较的是内存地址,结果是bool类型
print(s1 is s4)
'''
小练习--->字母和数字的组合(下标),随机产生验证码
'''
import random
filename = ''
s = 'QHUJFUHSKHhfkhhuihja1234487685'
for i in range(4):
index = random.randint(0, len(s) - 1)#随机产生下标
filename += s[index]#获取下标匹配的字母
print(filename)
1.2字符串的切片
1.2.1 字符串索引机制: 1.0~len(s)-1
2.-len(s)~-1
例如:例如: A B C D E F
index:0 1 2 3 4 5 ----->从前往后
-6 -5 -4 -3 -2 -1 ----->从后往前
'''
字符串的获取
'''
# s1='https://www.bilibili.com/video/BV1R7411F7JV?p=31&spm_id_from=pageDriver&vd_source=b48454820a3fd825265eef66d6df4c82'
s1 = 'ABCDEF'
print(s1[4]) # E
print(s1[0]) # A
print(s1[-1]) # F
print(s1[-1], s1[-5]) # F B
print(len(s1)) # 6,通过len(s)可以获取字符串的长度
1.2.2 切片:
格式:字符串变量[start:end]---->结果:包含start,不包含end
字符串变量[start:end:step]---->step:1.步长,2.方向: step 正数 从右向左
'''
切片
'''
s = 'ABCDEFG'
print(s[1:4]) # BCD
print(s[:5]) # 默认从零开始 ABCDE
print(s[-3:7]) # 两套规则可以交叉使用
print(s[-3:])
x = s[:]
print(x)
print(s)
print(id(x))
print(id(s)) # 内容一样,地址也一样
# 取中间值
print(s[1:-1])
print(s[:7:2]) # ACEG
print(s[1::2])
# step:1.步长,2.方向: step 正数 从右向左
print(s[::4]) # AE
print(s[-3::-4]) # EA
print(s[0:6:-2]) # 无值
print(s[6:0:-2]) # GECA
1.3字符串的常见操作
获取长度:len()
查找内容:find(),index(),rfind(),rindex()
判断:startswith(),endswith(),isalpha(),isdigit(),isalnum,isspace(),isupper(),islower()
计算出现次数:count()
替换内容:replace()
切割字符串:split(),rsplit(),splitlines(),partition(),rpartition()
修改大小写:capitalize(),title(),upper(),lower()
空格处理:ljust(),rjust(),center(),lstrip(),rstrip(),strip()
字符串拼接:join()
(1).获取长度:len()
s='https://www.bilibili.com/video/BV1R7411F7JV?p=32&spm_id_from=pageDriver&vd_source=b48454820a3fd825265eef66d6df4c82'
print(len(s))#获取字符串的长度
(2).查找
find():从左往右查找,遇到符合要求的返回位置,没有找到返回-1
rfind():从右往左找,遇到符合要求的返回位置,没有找到返回-1
index():从左往右查找。
index()与find()区别:index()没有找到会报错,find()没有找到返回-1
'''查找--->find ,index,rfind,lfind'''
path = 'https://www.bilibili.com/video/BV1R7411F7JV?p=32&spm_id_from=pageDriver&vd_source=b48454820a3fd825265eef66d6df4c82.gif'
i = path.find('_') # 查找'_'的位置
i1=path.find('video')#查找多个字符,返回第一个字符的位置
print(i)
print(i1)
n = path[i + 1:] # 第一个_后面所有内容
print(n)
print('----')
n1 = path.rfind('.') # 从右往左找
print(path[n1:])
n2 = path.index('.')
print(path[n2:])
(3).判断:返回值都是布尔类型
startswith():判断是否以xxx开头,是返回True,不是返回False
endswith():判断是否以xxx结尾,是返回True,不是返回False
'''
startswith,endswith介绍
'''
s = 'fdsgrgjoigUIHVnkhgyiif.2656.gif'
result1 = s.startswith('fds') # 判断是否以xxx开头,是返回True,不是返回False
result2 = s.endswith('gif') # 判断是否以xxx结尾,是返回True,不是返回False
print(result1)
print(result2)
'''
startswith,endswith对应小练习
模拟文件上传,键盘输入上传文件的名称,判断文件名是否大于6位以上,扩展名是否是:.jpg,gif,png格式
如果不是则提示上传失败,如果名字不满足条件,而扩展名满足条件则随机生成一个6位数字组成的文件名,打印成功上传xxxx.png
'''
1.
import random
name = input('输入图片文件名称:')
# 判断扩展名
if name.endswith('gif') or name.endswith('jpg') or name.endswith('png'):
# 判断文件名字
n = name.rfind('.')
file = name[:n] # 切片
if len(file) < 6:
# 随机生成名字
filename = ''
s = 'QHUJFUHSKHhfkhhuihja1234487685'
for i in range(5):
index = random.randint(0, len(s) - 1) # 随机产生下标
filename += s[index] # 获取下标匹配的字母
name = filename + name[n:]
print('成功上传%s文件' % name)
else:
print('文件格式错误!上传失败')
isalpha():判断全部由字母组成
isdigit():判断全部由数字组成
isalnum():判断全部由字母,数字组成
isspace():判断是否是空白字符串
isupper():判断是否为大写字母
islower():判断是否为小写字母
'''
isalpha,isdigit,isalnum,isspace,isupper,islower
'''
s = 'HELLO'
result = s.isalpha() # 判断是否由字母组成
result1 = s.isupper() # 判断是否为大写字母
result2 = s.islower() # 判断是否为小写字母
print(result1)
print(result2)
print(result)
s = '100sc'
result = s.isdigit() # 判断全部由数字组成
result1 = s.isalnum() # 判断全部由字母,数字组成
print(result)
print(result1)
s = ' '
print(s.isspace()) # 判断是否是空白字符串
'''
isalpha,isdigit,isalnum,isspace,isupper,islower对应小练习---->登录
用户名或者手机号码+密码登录
用户名(admin):全部小写,首字母不能是数字,长度必须是6位以上
手机号码(12345678912):纯数字 长度11
密码(123456):必须是六位数字
以上符合条件则进入下层验证:
判断用户名+密码是否正确---->成功,失败
'''
flag = True
while flag:
name = input('用户名/手机号:')
# 判断
if (name.islower() and name[0].isalpha() and len(name) >= 6) or (name.isdigit() and len(name) == 11):
while True:
# 验证密码
password = input('密码:')
if password.isdigit() and len(password) == 6:
# 验证
if (name == 'admin123' or name == '12345678912') and password == '123456':
print('用户登录成功!')
flag = False # 控制循环 ,跳出外层循环
break
else:
print('用户名或者密码有误!')
break # 跳出密码循环
else:
print('密码必须是六位数字!')
else:
print('登录失败,请重新登录!')
(4).计算出现次数:count()---->统计某个字符的个数
'''
计算出现次数:count
'''
path = 'https://www.bilibili.com/video/BV1R7411F7JV?p=32&spm_id_from=pageDriver&vd_source=b48454820a3fd82526'
n = path.count('i') # 统计i出现的次数
print(n)
(5).替换:replace(old,new,count)--->count默认为全部替换,可以通过count指定次数
'''
替换replce()
'''
s = '小花喜欢唱歌!'
print(s.replace('小花', '**', 1))#替换
(6).切割
split('分隔符','maxsplit'):maxsplit 最多分割的次数,默认值是全部分割。将分割后的内容放入一个列表容器中,返回结果为列表
rsplit('分隔符','maxsplit'):类似上面,从右边开始分割
splitlines():按行分割
partition():
rpartition():
'''
分割
'''
s = '小花 小丽 小军 小刘 小王'
result = s.split(' ') # 将分割后的内容放入一个列表容器中
print(result) # ['小花', '小丽', '小军']
result = s.rsplit(' ', 1) # 从右边开始切一刀
print(result) # ['小花 小丽', '小军']
s = '''小花喜欢唱歌!
小花喜欢唱歌!
小花喜欢唱歌!'''
result = s.splitlines()
print(result)
s = '小花 小丽 小军 小刘 小王'
result = s.partition(' ')
print(result)
(7).修改大小写
capitalize():第一个单词首字母大写
title():将每个单词的首字母转大写
upper():将字符串中所有字母转大写
lower():将字符串中所有字母转小写
'''
修改大小写
'''
s = 'helLo world'
print(s.title()) # 将每个单词的首字母转大写
print(s.upper()) # 将字符串中所有字母转大写
print(s.lower()) # 将字符串中所有字母转小写
print(s.capitalize()) # 第一个单词首字母大写
(8).空格处理
添加空格:控制字符串的对齐方式
ljust(X):给定X个字符,将内容左对其
rjust(X):给定X个字符,将内容右对齐
center(X):给定X个字符,将内容放在中央位置
删除空格:删除字符串左侧或者右侧的空格
lstrip():去掉左侧空格
rstrip():去掉右侧空格
strip():去掉左右两侧空格
'''
空格处理
'''
name = input('用户名:')
print(len(name)) # 当输入中有空格时也会被计数
s = ' admin '
print(len(s))
result = s.strip() # 去掉左右两侧空格
print(len(result))
print(result)
print('-----')
result1 = s.rstrip() # 去除右侧空格,左侧类似
print(len(result1))
print(result1)
print('---')
s = 'hello world'
result = s.center(30) # 取30个字符的中间
print(result)
result1 = s.ljust(30) # 取30个字符的左侧
print(result1)
result2 = s.rjust(30) # 取30个字符的右侧
print(result2)
(9).字符串拼接:join
'''
字符串拼接
'''
s='hello'+'world'
print(s)
'''
字符串总练习----模拟论坛
'''
msg = input('发表一句话:')
print('-' * 50)
print('以下为回复内容:')
while True:
# 输入用户名
username = input('输入用户名:')
while True:
# 输入回复内容
comment = input('评论:')
comment = comment.strip()
# 验证内容
if len(comment) != 0:
# 验证长度
if len(comment) <= 20:
# 是否存在敏感词汇
comment = comment.replace('恶心', '**')
print('{0}发表的内容是:{1}'.format(username, comment))
break
else:
print('不能超出20字!')
else:
print('评论内容不能为空!')
# 成功发出评论,否则重新输入
pass
2.列表 []
2.1 列表的介绍
2.1.1 定义列表
(1).空列表:名=[]
(2).有内容的列表:['A','B'....]、[[],[],[]...]
2.1.2 列表内容获取
通过索引(获取),切片方式和字符串类似
'''
列表介绍
'''
list1 = [] # 空列表
print(list1)
list2 = ['牛奶', '面包', '辣条', '火腿肠']
print(list2[3]) # 获取列表中内容,同各国索引(下标)
print(list2[:2]) # 切片机制与字符串类似
2.2 列表的增删改查
2.2.1 列表的添加
(1).append():在末尾添加元素
(2).insert():在指定位置插入元素
(3).extend():合并两个列表,作用同加号
格式:a.extend(b)---->将b的内容放在a中
'''
列表添加
'''
list1 = []
list2 = ['面包']
list1.append('火腿肠') # 在末尾添加元素
print(list1)
list1.append('酸奶')
list1.append('辣条')
print(list1)
list2.append('薯条')
print(list2)
# 整合----->加号可以用在数字,字符串,列表
# print(list1 + list2)
print('-----')
list1.extend(list2) # 将list(2)添加到list1中
print(list1)
2.2.2 列表的删除
(1).pop(index):根据下标删除列表中的元素,注意索引范围。pop无参数时从后往前依次删除一个元素
(2).remove():根据元素名称进行删除,当列表中有多个相同值,只删除第一个遇到的(从左往右),后面的元素不会被删除,与关键字in一起使用
(3).clear():清空列表,还可继续添加
(4).del :会删除内存地址,不可继续添加
格式:del 列表[位置] --> 根据下标位置删除。与pop类似
'''
列表的删除--->pop remove clear
'''
list1 = ['牛奶', '面包', '酸奶', '酸奶', '辣条', '火腿肠', '酸奶']
print(list1.pop(2))
print(list1)
print(list1.pop()) # pop()执行一次删除一个元素,默认从后往前删
print(list1)
list1.remove('辣条') # 根据元素名称进行删除
print(list1)
# 判断是否存在要删除的元素---->
if '辣条啊' in list1:
print('存在')
else:
print('不存在')
删除列表重复元素
n = 0
while n < len(list1):
if list1[n] == '酸奶':
list1.remove('酸奶')
else:
n += 1
print(list1)
list1.clear() # 清空列表所有内容
print(list1)
del list1[3]#根据下标位置删除
print(list1)
2.2.3 列表的修改:
insert(位置,元素):元素占了指定位置,其他元素只能往后移动
'''
列表的修改---->insert index
'''
list1 = [1, 2, 3, 4, 5]
# list1.insert(1, 8) # insert(位置,元素)--->元素占了指定位置,其他元素只能往后移动
# print(list1)
weizhi = list1.index(3) # 找到元素位置
list1[weizhi] = 8
print(list1)
print(list1.count(5))#寻找元素个数,
2.2.3 列表的查找
(1).index(元素):根据元素找到该元素的位置下标,返回值是下标位置
(2).count(元素):寻找元素个数,如果返回值为0则不存在
2.2 遍历列表
2.2.1 sort():默认是升序,可以通过reverse来控制升序还是降序
sort(reverse=True)---->True:倒序,False:升序
2.2.2 reverse():对原有列表进行反转,无排序
'''
随机生成1-20之间的随机整数,保存到列表中,遍历打印
'''
import random
numbers = []
for i in range(8):
ran = random.randint(1, 20)
numbers.append(ran)
print(numbers)
numbers.reverse() # 对原有列表进行反转,无排序
print(numbers)
print('----')
numbers.sort() # 排序,默认是升序
print(numbers)
print('----')
numbers.sort(reverse=True) # 倒序
print(numbers)
2.3 列表嵌套
'''
买多件
商品名称:价格、数量
列表的嵌套---->列表添加
'''
flag = True
container = []
total = 0 # 商品的总价
numbers = 0 # 商品的总数量
while flag:
# 添加商品
name = input('商品名称:')
price = input('商品价格:')
number = input('商品数量:')
goods = [name, price, number]
# 将商品加入container
container.append(goods)
total += float(price) * int(number)
numbers += int(number)
answer = input('是否继续添加?(按Q或q退出)')
if answer == 'q' or answer == 'Q':
flag = False
# 遍历container
print('名称t价格t数量')
for goods in container:
print('{}t{}t{}'.format(goods[0], float(goods[1]), int(goods[2])))
print('商品共{}件,总价是:{}元'.format(numbers, total))
'''
练习:
1.生成8个1-100之间的随机整数,保存到列表中
2.键盘输入一个1-100之间的整数,将整数插入到排序后的列表中(升降没有要求)
'''
# 练习1
import random
list = []
for i in range(8):
ran = random.randint(1, 100)
list.append(ran)
print(list)
# 练习2
list.sort()
print(list)
print('-----')
num = int(input('输入一个1-100之间的整数:'))
list.append(num)
list.sort()
print(list)
'''
冒泡排序
'''
num = [2, 54, 7, 33, 26, 1, 43, 8, 13, 4]
for j in range(0, len(num) - 1):
for i in range(0, len(num) - 1 - j):
if num[i] > num[i + 1]:
a = num[i]
num[i] = num[i + 1]
num[i + 1] = a
print(num)
3.元组 ()
空元组: 名=()
有内容元组: 名=('元素',),名=('元素','元素',...)。如果元组中只有一个元素,必须添加逗号
元组与列表相似,不同之处在于元组的元素不能修改(增删改),元组只能查看(count(),index())
count('元素'):寻找元素个数,如果返回值为0则不存在
index('元素',索引起始位置,索引结束位置(不包含)):返回为下标位置
下标和切片同样适用--->注意下标不要越界
list(tuple)---->元组转成列表
tuple(list)---->列表转元组
'''
元组
'''
t1 = ()
print(type(t1))
t2 = ('aa')
print(type(t2)) #
t2 = ('aa',)
print(type(t2)) #
t2 = ('aa', 'bh')
print(type(t2))
# 下标和切片同样适用
t3 = ('a', 'b', 'c', 'd', 'a', 'g', 'a')
# print(t3[0])
# print(t3[1:]) # ('b', 'c', 'd')
# print(t3[::-1]) # 逆序
n = t3.count('a')
print(n)
print('-----')
index = t3.index('a', 1, 6) # index('元素',索引起始位置,索引结束位置(不包含)),返回为下标位置
print(index)
'''
练习王者荣耀角色管理
角色:姓名,性别,职业
添加角色
删除角色
修改角色
查询角色 单个角色
显示所有角色
退出系统
'''
import random
import time
print('*' * 40)
print('t欢迎来到王者荣耀')
print('*' * 40)
role = input('请选择游戏人物:(1.鲁班 2.后裔 3.李白 4.孙尚香 5.貂蝉 6.诸葛亮)n')
coins = 1000
# 保存自己的武器容器
weapon_list = []
print('欢迎!{1}来到王者荣耀,当前金币有:{0}'.format(coins, role))
while True:
choice = input('请选择:n1.购买武器 2.大战n 3.删除武器n 4.查看武器n 5.退出游戏n')
if choice == '1':
# 购买武器
print('欢迎进入武器库:')
# 列表放武器
weapons = [['刀', 2000], ['枪', 200], ['大玩具', 250], ['剑', 600], ['手榴弹', 300], ['鹅毛扇', 600]]
# 遍历武器库
for weapon in weapons:
print(weapon[0], weapon[1], sep=' ')
# 提示输入要购买武器
weapon_name = input('请输入要购买的武器名称:')
# 1.原来有没有买过武器,2.输入的武器是否在武器库中
if weapon_name not in weapon_list:
# 输入的名称是否在武器库中
for weapon in weapons:
if weapon_name == weapon[0]:
# 购买武器
if coins >= weapon[1]:
coins -= weapon[1]
weapon_list.append(weapon[0]) # 添加到你自己的武器库中
print('{}购买武器:{}成功'.format(role, weapon_name))
break
else:
print('金币不足,赶快大战赚金币!')
break
else:
print('输入武器名称错误!')
else:
print('已经拥有此武器!')
elif choice == '2':
# 大战 假设你有多个武器
print('进入战场....')
# 判断是否有武器
if len(weapon_list) > 0:
# 选择武器
print('{}拥有的武器如下:'.format(role))
for weapon in weapon_list:
print(weapon)
while True:
weapon_name = input('请选择:')
#
if weapon_name in weapon_list:
# 选择的武器在自己的武器库中,开始对战,默认和张飞对战
ran1 = random.randint(1, 30)
ran2 = random.randint(1, 30)
if ran1 > ran2:
print('此局对战:张飞胜利!!')
elif ran1 < ran2:
coins += 200
print('此局对战:{0}胜利,目前金币是:{1}'.format(role, coins))
else:
print('此局平局,可以再次对战!'.format(role))
break
else:
print('选择的武器不存在,请重新选择!')
# 随机判断输赢
else:
print('还没有购买武器,赶快使用购买武器!')
elif choice == '3':
# 删除武器
# 判断是否有武器
print('武器太多,请扔几个....')
if len(weapon_list) > 0:
print('{}拥有的武器如下:'.format(role))
for weapon in weapon_list:
print(weapon)
# 请选择要删除的武器
while True:
weapon_name = input('请选择要删除的武器名称')
if weapon_name in weapon_list:
# 删除武器 remove(obj) pop(index) clear del_weapon_list[index]
weapon_list.remove(weapon_name)
# 思考 归还金币
# print(weapons)
# 遍历总的武器库
for weapon in weapons:
if weapon_name == weapon[0]:
coins += weapon[1]
break
else:
pass
break
else:
print('输入武器名称有误!')
else:
print('你都没有武器,还多吗? 赶快购买去吧!')
elif choice == '4':
# 遍历武器
print('{}拥有的武器如下:'.format(role))
for weapon in weapon_list:
print(weapon)
print('总金币有:{}'.format(coins))
elif choice == '5':
# 退出游戏
answer = input('确定要离开王者荣耀游戏吗?(y or Y/n)')
if answer == 'y' or answer == 'Y':
print('正在离开王者荣耀!')
time.sleep(2)
print('欢迎下次进入王者荣耀!')
break
else:
print('输入错误,请重新选择')
4.字典 {}
4.1 定义
空字典:dict={}
带值字典:dict={'参数':值','..':'..'...}
元素:键值对 注意:键是唯一的,值允许重复
下标或者切片不存在
'''
字典:{}
'''
dict1 = {}
print(dict1)
dict2= {'名字': '小丽', '年龄': 18} # {'名字': '小丽', '年龄': 18}
print(dict2)
dict3 = dict([('name', 'lucky'), ('age', 18)])
print(dict3)
4.2 操作
4.2.1 添加,修改元素:
字典名[key]=value ----->是添加还是修改,看字典中键是否存在,若存在,为修改,否则为添加
注意:key是唯一的,所以在添加的时候如果出现同名的key,后面key对应的value则替换原来的
'''
字典:{}
'''
dict1 = {}
print(dict1)
dict2= {'名字': '小丽', '年龄': 18} # {'名字': '小丽', '年龄': 18}
print(dict2)
dict3 = dict([('name', 'lucky'), ('age', 18)])
print(dict3)
'''
字典的增加,修改
'''
dict1 = {}
print(type(dict1))
dict1['name'] = '小丽'
print(dict1)
dict1['age'] = 18 # 添加元素
dict1['sex'] = '女'
print(dict1) # {'name': '小丽', 'age': 18, 'sex': '女'}
# 修改值:键 可以添加,删除,不能修改,只能改变值
dict1['age'] = 21 # 修改元素
print(dict1)
'''
字典添加与修改练习:
book={}
书名,价格,作者,出版社
促销:价格折扣8折
打印最终字典中的内容
'''
book = {}
# 添加
book['书名'] = '狂人日记'
book['价格'] = 30
book['作者'] = '鲁迅'
book['出版社'] = '人民出版社'
print(book)
# 修改价格
book['价格'] *= 0.8
print(book)
4.2.2 删除
clear():清空字典
pop():根据Key删除键值对,返回key对应的value
popitem():删除的最后一个键值对,返回值:(key,value)
del 字典名['key']:删除key对应的键值对
'''
删除字典
'''
book = {'书名': '狂人日记', '价格': 24.0, '作者': '鲁迅', '出版社': '人民出版社'}
book.clear() # {} clear():清空字典
print(book)
r = book.pop('书名') # pop():根据Key删除键值对,返回key对应的value
print(r)
print(book)
r = book.popitem() # popitem():删除的最后一个键值对,返回值:(key,value)
print(r)
print(book)
del book['价格'] #del 字典名['key']:删除key对应的键值对
print(book)
'''
删除小练习
books=[{},{}]
book={}
书名,价格,作者,出版社
有两本书,删除每一本里面的出版社
'''
books = [{'书名': '狂人日记', '价格': 24.0, '作者': '鲁迅', '出版社': '人民出版社'},
{'书名': '流浪地球', '价格': 30, '作者': '刘慈欣', '出版社': '教育出版社'}]
for book in books: # book是一个字典
book.pop('出版社')
print(books)
4.2.3 查询
get('key','默认值'):根据key得到对应的value值,如果取不到,返回默认值
dict['key']:取不到时会报错
4.3 遍历
如果使用for ..in 直接遍历字典,取出的是字典的key
book.value():将字典中的所有的值取出来,将值存放在列表中
book.keys():将字典中的键取出来
book.items():成对取出,将一对放在元组里
'''
遍历与查询
'''
book = {'书名': '狂人日记', '价格': 24.0, '作者': '鲁迅'}
# value = book.get('书名','红楼梦') # get('key','默认值'):根据key得到对应的value值,如果取不到,返回默认值
# print(value)
value = book['书名'] # 取不到时会报错
print(value)
# 遍历
for i in book: # 如果使用for ..in 直接遍历字典,取出的是字典的key
print(i)
# {'书名': '狂人日记', '价格': 24.0, '作者': '鲁迅', '出版社': '人民出版社'}
print(book.values()) # 将字典中的值取出来
for v in book.values():
print(v)
print(book.keys()) # 将字典中的键取出来
print(book.items()) # 成对取出,将一对放在元组里
for i in book.items():
print(i)
for k, v in book.items():
print(k, v)
book.setdefault('出版社','人民教育出版社')#类似 添加 book[key]=value
print(book)
'''
字典大练习
books=[]--->可放多本书
书:{}
书名 作者 价格
添加三本书
不可添加同名书籍
'''
books = []
i = 0
while i < 3:
dict1 = dict.fromkeys(['name', 'author', 'price'])
name = input('输入书名:')
# 判断书是否存在
if name == dict1.get('name'):
print('书名重复!')
continue
else:
author = input('输入作者:')
price = input('输入价格:')
dict1['name'] = name
dict1['author'] = author
dict1['price'] = price
books.append(dict1)
i += 1
print(books) # 结果为列表
5.集合
5.1定义集合
空集合:set()
集合(set):是一个无序的不重复元素序列,使用{}或者set()函数创建
特点:没有重复,无序的(没有下标);符号:{},花括号里为单独的元素,是集合
'''
集合
'''
set1 = {'zhangsan'}
print(type(set1))
# 去除重复元素
list = [1, 4, 2, 7, 4, 8, 4, 3, 7, 6, 2, 5]
set2 = set(list)
print(set2)
5.2集合操作
操作:add()
set1.update(set2):将set2内容添加到set1中
'''
集合中添加元素
'''
set1 = set() # 定义空集合
print(type(set1))
set1.add('快了')
print(set1)
print('----')
set2 = {'红楼梦'}
set1.update(set2) # 将集合2的内容添加到集合1中
print(set1)
print(set2)
remove():如果是集合中元素则删除,不是集合中元素则出错
discard():不是元素也什么都不做
del set():全删除
clear():清空内容
pop():随机删除集合中任意一个元素
set1={' bj5s', ' b53b', '565s', ' sg4d', ' gb64'}
set1.remove('565s')
print(set1)#{' b53b', ' bj5s', ' sg4d', ' gb64'}
set1.discard('567s')
print(set1)#{' b53b', ' sg4d', ' gb64', ' bj5s'}
方法:
集合的交集(set1|set2)---->intersection
集合的并集(set1&set2)---->union
集合的差集(set1-set2)---->difference
set2={1,2,3,4,6}
set3={2,3,4,8,9,7}
print(set2.intersection(set3)) # 集合的交集{2,3,4}
print(set3.union(set2)) # 并集{1, 2, 3, 4, 6, 7, 8, 9}
print(set3.difference(set2)) # 差集 {8, 9, 7}
print(set3|set2) # | 表示集合的并 {1, 2, 3, 4, 6, 7, 8, 9}
print(set3&set2) # & 表示集合的交 {2,3,4}
print(set3-set2) # - 表示集合的差 {8, 9, 7}
'''
集合小练习
产生五组(不允许重复),字母与数字组成的验证码
'''
import random
code_list = set()
s = 'bfhb kgjbsjhb15634345gsdggsgs526njskg'
while True:
code = ' '
for i in range(4):
# 方式一
# r=random.choice(s)
# code+=r
# 方式二
index = random.randint(0, len(s) - 1)
code += s[index]
# 将code添加到set中
code_list.add(code)
# 判断长度
if len(code_list) == 5:
break
print(code_list)
6.公共方法
list1 = [1, 2, 3, 4, 5, 9]
print(max(list1)) # 找最大值
print(min(list1))
print(sum(list1)) # 求和
print(abs(-1)) # 绝对值
# 对元组中进行排序...元组没有排序方法,只有列表有
t1 = (55, 63, 42, 1, 22, 62)
print(sorted(t1)) # 排序完返回一个新的列表,升序
print(sorted(t1, reverse=True)) # 降序
print(chr(95)) # 给定一ASCII码值返回对应字母
print(ord('a')) # 给定字母返回ASCII码值
符号:
+ (合并) --> 主要用在字符串,列表,元组
* (复制) --> 主要用在字符串,元组 ,列表
in ---> 主要用在字符串,元组,列表,字典
not in -->主要用在字符串,元组,列表,字典
8.列表推导式
列表推导式:最终结果是一个列表
格式:1.[变量(最终的结果) for 变量 in 可迭代的变量]
2.[i for i in 可迭代的 if 条件]
3.[结果1 if 条件 else for 变量 in 可迭代的]
'''
列表推导式
小练习:1.请写出一段python代码实现分组一个list里面的元素,比如[1,2,3,..100]变成[[1,2,3],[4,5,6]...]
2. 找出名字里面含有两个‘e’的放到新的列表中
names=[['sdf','fergerg','sfsgrrd','egxdgre'],['sff','sgrerrr','fdsgbrtree']]
'''
if 5 > 3:
print('--')
else:
print('gaup''')
# 将1-20之间数字放到列表中
# 方法一-----》常规方法
list1 = []
for i in range(1, 21): # 列表中是1到20
list1.append(i)
print(list1)
# 方法二-----》:列表推导式
list1 = [i for i in range(1, 21)] # 结果是1-20
print(list1)
list2 = [i + 2 for i in range(1, 10)] # 先执行for循环,for循环的每个变量参与到i+3中来(每个数都加3),,i+3中内容即为列表内容,结果是3-11
print(list2)