Python 基础语法2:组合数据类型、异常

Python 基础语法2:组合数据类型、异常

6、数据组合类型

图片

(1)序列

在python中,有这样一些类型,它们的成员是有序排列的,并且可以通过下标访问成员,这些类型称之为序列;序列包括:列表、range、元组和字符串;

在字符串中的很多操作,序列也是支持的,部分常用的函数如下:

函数 描述 备注
len(item) 计算容器中元素个数
del(item) 删除变量 del 有两种方式
max(item) 返回容器中元素最大值 如果是字典,只针对 key 比较
min(item) 返回容器中元素最小值 如果是字典,只针对 key 比较
描述 Python****表达式 结果 支持的数据类型
切片 “0123456789”[::-2] “97531” 字符串、列表、元组

序列的通用操作包括如下:

运算符 Python****表达式 结果 描述 支持的数据类型
+ [1, 2] + [3, 4] [1, 2, 3, 4] 合并 字符串、列表、元组
* [“Hi!”] * 4 [‘Hi!’, ‘Hi!’, ‘Hi!’, ‘Hi!’] 重复 字符串、列表、元组
in 3 in (1, 2, 3) True 元素是否存在 字符串、列表、元组、字典
not in 4 not in (1, 2, 3) True 元素是否不存在 字符串、列表、元组、字典
> >= == < <= (1, 2, 3) < (2, 2, 3) True 元素比较 字符串、列表、元组

(2)列表

List(列表) 是 Python 中使用 最频繁 的数据类型,在其他语言中通常叫做 数组,专门用于存储 一串 信息,列表用 [ ] 定义,数据 之间使用 , 分隔,列表的 索引 从 0 开始。索引 就是数据在 列表 中的位置编号,索引 又可以被称为 下标

注意:从列表中取值时,如果 超出索引范围,程序会报错;可以使用list()函数进行类型转换,将字符串转为列表。

列表除了支持加法、乘法操作外,还可以使用in进行成员判断,通过for循环等进行遍历。在遍历过程中,可以使用enumerate()函数遍历列表元素与索引。

列表还有一些常用的方法,以列表名.方法名()的形式调用。

分类 关键字**/函数/**方法 说明
增加 列表.insert(索引, 数据) 根据索引,在指定位置插入
列表.append(数据) 在末尾追加数据
列表.extend(列表2) 将列表2 的数据追加到列表
修改 列表[索引] = 数据 修改指定索引的数据
删除 del 列表[索引] 删除指定索引的数据
列表.remove[数据] 删除第一个出现的指定数据
列表.pop 删除末尾数据(出栈)
列表.pop(索引) 根据索引,删除指定数据
列表.clear 清空列表
统计 len(列表) 列表长度
列表.count(数据) 数据在列表中出现的次数
排序 列表.sort() 升序排序
列表.sort(reverse=True) 降序排序
列表.reverse() 逆序、反转

(3)元组

Tuple(元组)与列表类似,不同之处在于元组的 元素不能修改;元组表示多个元素组成的序列,用于存储 一串 信息,数据 之间使用 , 分隔,用()定义。当元组里面只有一个元素时,需要在该元素后面加上一个逗号;还可以使用tuple()函数进行类型转换、定义空的元组等。

(4)range函数

range函数是python提供的内置函数,range(start,end,[step=1])生成一个等差序列[start, end)。

(5)字符串

字符串除了常用的创建、索引、切片等操作外,也支持加法、乘法等常用的序列通用操作。在字符串中,maxmin函数是通过ASCII码判断大小,可以使用ord()函数查看ASCII码。

除了int类型可以使用str()函数转str外,元组和列表也可以转str,但是转换后仍保留了列表和元组的格式。

字符串也有自带的函数,例如islower判断是否都是小写,count进行计数,strip去除字符串的空格,split按分隔符分割字符串,find找某个元素的索引值,join连接字符串。

(6)字典

dictionary(字典) 是 除列表以外 python 之中 最灵活 的数据类型,字典同样可以用来 存储多个数据通常用于存储 描述一个 ,物体 的相关信息。和列表的区别:列表是 有序 的对象集合,字典 是 无序 的对象集合。

字典用 {} 定义,字典使用 键值对 存储数据,键值对之间使用 , 分隔。键 key 是索引,值 value 是数据,键 和 值 之间使用 : 分隔,键必须是唯一的,值 可以取任何数据类型,但 键 只能使用 字符串、数字或 元组。

图片

新增键值对或者新增键值对时,使用d1["键名"]=具体值的方式;字典没有索引,因此检索或者查看时,要使用键进行查询。

字典的遍历可以使用for循环,也可以使用 .items()方法,将字典转为包含键值对的一个列表。字典也有大量的方法,例如常用的.get获取某个键对应的值。

(7)集合

集合也是使用{}创建,不允许有重复元素,如果添加重复元素,则会自动过滤,可以进行交集、并集的运算;有时候还可以利用集合无重复的特性,将列表转集合,实现去重的效果。

集合是一种无序且无重复元素的数据结构。与dict类似,是一组key的集合(不存储value)。当使用set函数将dict转set后,仅保留key作为集合。此外,由于集合无序,所以它不支持索引

集合也支持不少的方法,常用的upadte、copy、remove、add等方法都支持。

(8)可变类型与不可变类型

不可变数据类型在创建后,其值就不能被改变。Python中的以下数据类型是不可变的:数字(int, float, complex)字符串(str)元组(tuple)布尔类型(bool),不能通过索引的方式进行值的修改,但是可以通过重新赋值等方式修改。

可变数据类型的值可以在创建后被改变。Python中的以下数据类型是可变的:列表(list)字典(dict)集合(set)

7、异常处理

图片

如果代码没有语法问题,可以运行,但会出运行时的错误,例如除零错误,下标越界等问题,这种在运行期间检测到的错误被称为异常

常出现的异常如下:

报错类型 描述
AssertionError 当assert断言条件为假的时候抛出的异常
AttributeError 当访问的对象属性不存在的时候抛出的异常
IndexError 超出对象索引的范围时抛出的异常
KeyError 在字典中查找一个不存在的key抛出的异常
NameError 访问一个不存在的变量时抛出的异常
OSError 操作系统产生的异常
SyntaxError 语法错误时会抛出此异常
TypeError 类型错误,通常是不同类型之间的操作会出现此异常
ZeroDivisionError 进行数学运算时除数为0时会出现此异常

在编辑器中常用的排除异常的方法有多种,比较简单的可以通过编辑器提供的错误信息进行修改;当代码比较复杂时,可以使用print打印变量或者分隔符等方式查看输出来排查错误,还可以使用注释部分代码的方式查看错误;此外,还可以直接使用pycharm等编辑器的断点debug功能,通过调试的方式来一句句查找错误,当不知道某个函数体是否没问题时,还可以步入某个函数体。

(1)try-except

可以使用try-except语句进行异常的检测和处理,示例如下:

1、首先执行try中【代码块A】,如果出现异常,立即终止代码执行,转而到except块中进行异常处理

2、异常处理except模块可以多个,从上往下匹配,如果能够匹配成功,立即执行相应的异常处理代码块,执行完毕后,不在往下匹配,转到3执行

3、执行异常处理完毕后,如果有finally字句则执行finally字句,如果没有则执行【后续语句】

4、如果匹配不到异常,有finally则执行finally,然后则抛出错误,终止程序执行。

5、如果没有异常,如果有else字句则执行else字句,执行完else后,有finally字句则执行,没有则执行【后续语句】

图片

使用try-except语句能够避免程序直接报错,避免程序卡顿,不耽误后续程序的执行等。在try-except语句中,还可以结合不同的错误类型,例如except SyntaxError:来打印语法错误的提示,同时可以结合as子句,将原始的报错信息保存为某个变量,例如except SyntaxError as er:,通过打印变量er就能获得原始的错误信息。

(2)raise

raise语句可以手动抛出一个指定类型的异常,无论是哪种异常类都可以带一个字符串参数,对异常进行描述。

尽管很多时候if-else等语句可以处理一些异常,但是if-else更多是用来处理逻辑和内容,而不是用来处理异常。处理异常更多建议使用try-except语句和raise等。reise抛出异常是,可以设置参数,包括异常名称和异常信息的描述等,例如下面的ZeroDivisionError是个异常名称,”除0错误”是异常描述。

图片

(3)案例练习

图片

案例是一个整数的简单计算器。需求:支持加减乘除四则运算,不符合规范要给出相应的提示。任务包括:加减乘除运算、异常情况的处理,例如除0、乘法符号错误等异常的提示;数据结构的涉及比较简单,仅仅需要存储数据结果。

整个代码流程包括:用户输入算式;根据算式,判断运算类型(加、减、乘、除或异常);最后打印结果,错误或异常给出相应的提示。此外,整个流程要循环进行,确保能够多次进行计算。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
while True:
try:
op = input("请输入一个四则运算式(例如:1+1):")
if"+"in op:
a = op.split("+")
result = int(a[0]) + int(a[1])
print(result)
elif"-"in op:
a = op.split("-")
result = int(a[0]) - int(a[1])
print(result)
elif"*"in op:
a = op.split("*")
result = int(a[0]) * int(a[1])
print(result)
elif"/"in op:
a = op.split("/")
result = int(a[0]) / int(a[1])
print(result)
elif op == "C":
print("已退出计算")
break
else:
raise Exception("请按1+1格式输入算式")
except ZeroDivisionError:
print("除数不能为0")
except Exception as e: print(e)

https://mp.weixin.qq.com/s/IiOb__NqrjSoBcM-1Hudxw?scene=1