Python基础篇(八)
前言
不知不觉已经写了8篇了,不知读者有没有想跟作者说点悄悄话呢,那么请下方评论留言哈哈哈,我一定会关注你的~
一、集合
说明:字典和集合都可以使用 {} 定义,但是 Python 解释器会根据 {} 中的元素来判断。
1.1 创建集合
# 注意: 如果要创建空集合只能使用 set() ,因为 {} 用来创建空字典
s1 = {
10,20,30}
print(type(s1)) # 结果为 <class 'set'>
s2 = set()
print(type(s2)) # 结果为 <class 'set'>
d1 = {
'name': '张三'}
print(type(d1)) # 结果为 <class 'dict'>
d2 = {
}
print(type(d2)) # 结果为 <class 'dict'>
# 集合会自动去除重复数据,数据是无序的,所以也不能通过下标获取集合中的元素
s2 = {
10,20,10,30}
l1 = [10,20,10,30]
t1 = (10,20,10,30)
print(s2) # {10, 20, 30}
print(l1) # [10, 20, 10, 30]
print(t1) # (10, 20, 10, 30)
# 通过下标获取集合中的元素
print(s2[0]) # 结果为报错 'set' object is not subscriptable
1.2 增加数据
- add(): 添加指定元素到集合中
# 注意: 因为集合有去重功能,所以,当集合追加的元素,原集合已有,那么不进行任何操作。
# 举例
s3 = {
'a','b','c'}
s3.add('d')
print(s3) # 结果为 {'b', 'd', 'c', 'a'}
s3.add('a') # 自动去除重复的值
print(s3) # 结果为 {'b', 'd', 'c', 'a'}
- update(): 和列表的 extend() 方法相似,追加的数据是序列
# 举例
# 单个元素也可以添加
s3 = {
'a','b','c'}
s3.update('e')
print(s3) # {'e', 'a', 'b', 'c'}
s3.update('hello')
print(s3) # {'h', 'l', 'o', 'a', 'b', 'c', 'e'}
s3.update([10,20,30])
print(s3) # {'h', 10, 'l', 'o', 'a', 20, 'b', 'c', 30, 'e'}
1.3 删除数据
- remove(): 删除集合中的指定元素,如果元素不存在则报错
# 举例
s3 = {
'a','b','c'}
s3.remove(30)
print(s3) # 报错
s3.remove('b')
print(s3) # {'c', 'a'}
- discard(): 删除集合中的指定元素,如果元素不存在也不会报错
# 举例
s3 = {
'a','b','c'}
s3.discard('o')
print(s3) # {'c', 'a', 'b'}
- pop(): 随机删除集合中的某个元素,并返回这个元素
# 举例
s3 = {
'a','b','c'}
s3.pop()
print(s3) # {'a', 'c'}
1.4 查找数据
- in : 判断数据在集合序列,在返回 True 反之 False。
- not in : 判断数据不在集合序列 , 在返回 True 反之 False。
# 举例
s3 = {
'a','b','c'}
print('a' in s3) #结果为 True
print('a' not in s3) #结果为 False
二、公共操作
2.1 公共运算符
运算符 | 描述 | 支持的容器类型 |
---|---|---|
+ | 合并 | 字符串、列表、元组 |
* | 复制 | 字符串、列表、元组 |
in | 判断元素是否存在 | 字符串、列表、元组、字典 |
not in | 元素是否不存在 | 字符串、列表、元组、字典 |
- " + " 的操作
# 举例
# 字符串操作
print('a'+'b') # 结果为 ab
# 列表操作
l1 = ['a','b','c']
l2 = [10,20,30]
print(l1+l2) # ['a', 'b', 'c', 10, 20, 30]
# 元组操作
t1 = (10,20)
t2 = (30,40)
print(t1+t2) # (10, 20, 30, 40)
- " * "的操作
# 举例
# 字符串操作
print('_'*10) # __________
# 列表操作
list1 = ['a','b']
print(list1 * 3) # ['a', 'b', 'a', 'b', 'a', 'b']
# 元组操作
tuple1 = ('a','b')
print(tuple1 * 3) # ('a', 'b', 'a', 'b', 'a', 'b')
in 和 not in 上面介绍过了,这里就不再介绍了,敲累了哈哈哈。
2.2 公共方法
函数 | 描述 |
---|---|
len() | 计算容器中元素个数 |
del 或 del() | 删除 |
max() | 返回容器中元素最大值 |
min() | 返回容器中元素最小值 |
range(start,end,step) | 生成从 start 到 end 的数字,步长为 step, 供 for 循环使用 |
enumerate() | 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中 |
- len()
# 举例
# 字符串操作
str1 = 'abcdefg'
print(len(str1)) # 结果为 7
# 列表操作
list1 = [10,20,30]
print(len(list1)) # 结果为 3
# 元组操作
tuple1 = (1,2,['张三','小明'],True)
print(len(tuple1)) # 结果为 4
# 字典操作
dict1 = {
'name': '张三','gender': '男','age': 20}
print(len(dict1)) # 结果为 3
# 集合操作
set1 = {
10,5,'小明',True}
print(len(set1)) # 结果为 4
- del()
# 举例
# 字符串操作
str1 = 'abcdefg'
del str1
print(str1) # 结果为报错,因为已经删除 str1 变量存储的数据,所以再输出报错
# 列表操作
list1 = [10,20,30]
del list1[0]
print(list1) # 结果为 [20, 30]
# 元组操作
tuple1 = (1,2,['张三','小明'],True)
del tuple1[0]
print(tuple1) # 结果报错 因为元组不支持修改数据
# 字典操作
dict1 = {
'name': '张三','gender': '男','age': 20}
del dict1['age']
print(dict1) # 结果为 {'name': '张三', 'gender': '男'}
# 集合操作
set1 = {
10,5,'小明',True}
del set1[0]
print(set1) # 结果为报错,因为集合是无序的,不支持下标
- max() : 获取序列中最大的值
# 举例
# 字符串操作
str1 = 'abcdefg'
print(max(str1)) # 结果为 g 因为是按26个字母顺序来取的值,越靠后字母表示越大
# 列表操作
l1 = [10,20,5,9,11]
print(max(l1)) # 结果为 20
# 元组操作
tuple1 = (1,2,True)
print(max(tuple1)) # 结果为 2 因为 True 为1
# 字典操作
dict1 = {
'name': '张三','gender': '男','age': 20}
print(max(dict1)) # 结果为 name 按字母顺序取的值
# 集合操作
set1 = {
'小明','老王','张三'}
print(max(set1)) # 结果为 老王 因为是按汉字拼音首字母顺序取最大值
看到这里,大部分同学都想到了,还会有最小值,没错,就是 min() 方法,使用方法和 max() 是一样的,具体就不介绍了,上过小学的数学课的,都会知道最小值怎么区别吧。
- range()
# 举例
# 注意: range() 生成的序列不包含 end 数字
for i in range(1,10,1):
print(i)
""" 结果为 1 2 3 4 5 6 7 8 9 """
for i in range(1,10,2):
print(i)
""" 结果为 1 3 5 7 9 """
- enumerate()
- 语法格式
enumerate(可遍历对象,start = 0)
# 注意: start参数用来设置遍历数据的下标的起始值,默认为0
# 举例
list1 = ['a','b','c','d']
for item in enumerate(list1):
print(item)
""" 结果为 (0, 'a') (1, 'b') (2, 'c') (3, 'd') """
for item in enumerate(list1,10):
print(item)
""" 结果为 (10, 'a') (11, 'b') (12, 'c') (13, 'd') """
2.3 类型转换
说明: 想把谁转换成什么类型,就把谁把它包起来
# 举一个简单的例子
str1 = 'abc123'
print(list(str1)) # 结果为 ['a', 'b', 'c', '1', '2', '3']
三、任务清单
- 编写代码在控制台按照如下格式输出字符串
""" hello world 你好 世界 """
print('hello\n world\n你好\n 世界')
# 运行结果:
hello
world
你好
世界
- 让用户输入年龄,然后将用户的年龄加上2岁,并输出
age = int(input('请输入年龄:'))
print(age+2)
# 运行结果:
请输入年龄:10
12
- 马上就要到国庆假期了,很多人准备了出游计划,让用户输入出游目标地点,如“杭州”,然后在控制台输出“杭州,我来了”
city = input('输入出游目标地点:')
print(f'{
city},我来了')
# 运行结果:
输入出游目标地点:北京
北京,我来了
- 继续上面的题目,这次让用户同时输入三个目标出游地点,中间使用“、”分割,如“杭州、苏州、常州”,然后在控制台输出
""" 杭州,我来了 苏州,我来了 常州,我来了 """
city = input('输入三个目标出游地点(中间用"、"分割):')
result = city.split('、')
for i in result:
print(f'{
i},我来了')
运行结果:
输入三个目标出游地点(中间用"、"分割):北京、天津、保定
北京,我来了
天津,我来了
保定,我来了
- 让用户输入邮箱地址,如“onlifes@163.com”,分别截取其中的
""" 用户名,如 onlifes 域名,如 163.com 并输出 """
address = input('输入邮箱地址:')
result = address.split('@')
print(f'用户名:{
result[0]},域名:{
result[1]}')
# 运行结果:
用户名:onlifes,域名:163.com
- 让用户输入邮箱地址,然后判断邮箱地址格式是否正确
""" 邮箱地址中必须包含 @ 符号和 ,并且 . 需要在@后面,还不能紧挨着 如果符合要求,输出“邮箱格式正确” 如果不符合要求,输出“邮箱格式不正确” """
address = input('输入邮箱地址:')
if address.find('@') != -1 and address.find('.') != -1:
if address.find('.') > address.find('@')+1:
print('邮箱格式正确')
else:
print('邮箱格式不正确')
else:
print('邮箱格式不正确')
- 让用户输入身份证号,分别截取如下部分并输出
""" 出生年份 出生月份 出生日期 性别 说明:身份证号的组成是有规律的,前6位表示行政区划,第7-10位表示出生年份,11-12表示出生月份,13-14表示出生日期,17位表示性别,具体可参考下图:[身份证的组成结构- 本地宝 (bendibao.com)]( """
Id = input('请输入身份证号:')
if len(Id) > 17:
print(f'出生年份:{
Id[6:10]},出生月份:{
Id[10:12]},出生日期:{
Id[12:14]},性别:{
"男" if Id[16] == "1" else "女"}')
else:
print('身份证号码不对')
- 让用户输入手机号,然后判断是否以“156”开头
tel = input('请输入手机号:')
if tel.startswith('156'):
print('是否以“156”开头')
else:
print('不是否以“156”开头')
- 让用户输入手机号,然后做出如下判断
""" 必须以 156 或者 133 或者 137 开头 手机号码长度必须是11位 手机号码必须都是数字 如果符合上面三个要求,输出“格式正确的手机号”,如果不符合,则输出“手机格式不正确” """
tel = input('请输入手机号:')
if tel.startswith('156') or tel.startswith('133') or tel.startswith('137'):
if len(tel) == 11:
if tel.isdigit():
print('格式正确的手机号')
else:
print('手机格式不正确')
else:
print('手机格式不正确')
else:
print('手机格式不正确')
- 让用户输入 QQ 号,然后做出如下判断
""" 必须全部都是数字 长度位6-11位 开头数字必须是1-9 """
QQ = input('请输入QQ号:')
list1 = ['1','2','3','4','5','6','7','8','9']
for i in list1:
if QQ.startswith(i):
if 6<= len(QQ) <= 11:
if QQ.isdigit():
print('账号正确')
break
else:
print('账号错误')
break
else:
print('账号错误')
break
else:
print('账号错误')
- 按照如下步骤,完成成绩统计功能
""" 让用户录入5位同学的成绩,然后将这5个成绩存储起来 计算总分并输出 计算平均分并输出,小数点后保留2位数字 计算最高分并输出 计算最低分并输出 """
score = input('请输入5位同学的成绩(以、号分割):')
result = score.split('、')
sum = 0
for i in result:
sum += int(i)
average = sum / len(result)
print(f'总分:{
sum},平均分:{
average:.2f},最高分:{
max(result)},最低分:{
min(result)}')
# 运行结果:
请输入5位同学的成绩(以、号分割):10、15、20、30、20
总分:95,平均分:19.00,最高分:30,最低分:10
- 定义一个字典,存储“HTML”这门课的基本信息,包括课程名称、课时、学分和授课老师
dict1 = {
'name': 'HTML','time': '16周','score': 100,'teacher': '张三'}
- 定义一个字典,存储你最喜欢的一部电影的信息,包括名称、上映日期、导演、一个主演名字
dict1 = {
'name': '复仇者联盟1','time': '2013-10-28','director': 'xxx','star': 'xxx'}
- 定义一个字典,存储你最喜欢的一部电影的信息,包括名称、上映日期、导演和3个主演名字
dict1 = {
'name': '复仇者联盟1','time': '2013-10-28','director': 'xxx','star': ['xxx','xx','xxx']}
- 定义一个字典,存储你最喜欢的一部电影的信息,包括名称、上映日期、导演和3个主演信息(主演名字和扮演角色名字)
dict1 = {
'name': '复仇者联盟1','time': '2013-10-28','director': 'xxx',
'star': [{
'name': '张三','cos': '钢铁侠'},
{
'name': '老王','cos': '绿巨人'}]}
- 创建一个序列,存储你最喜欢的2部电影的信息,包括名称、上映日期、导演和3个主演信息(主演名字和扮演角色名字)
dict1 = [{
'name': '复仇者联盟1','time': '2013-10-28','director': 'xxx',
'star': [{
'name': '张三','cos': '钢铁侠'},
{
'name': '老王','cos': '绿巨人'}]},
{
'name': '复仇者联盟2','time': '2016-10.28','director': 'xxx',
'star': [{
'name': '小明','cos': '美国队长'},
{
'name': '小红','cos': '黑寡妇'}]}]
- 让用户输入最喜欢的一个人的名字,然后将这个名字进行反转并输出,如“李磊”编程“磊李”
name = input('请输入你最喜欢的一个人的名字:')
print(name[-1::-1])
# 运行结果:
请输入你最喜欢的一个人的名字:天上龙卷风卷龙上天
天上龙卷风卷龙上天
总结
期与君共勉