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)字符串
字符串除了常用的创建、索引、切片等操作外,也支持加法、乘法等常用的序列通用操作。在字符串中,max
和min
函数是通过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、乘法符号错误等异常的提示;数据结构的涉及比较简单,仅仅需要存储数据结果。
整个代码流程包括:用户输入算式;根据算式,判断运算类型(加、减、乘、除或异常);最后打印结果,错误或异常给出相应的提示。此外,整个流程要循环进行,确保能够多次进行计算。
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("已退出计算")breakelse:raise Exception("请按1+1格式输入算式")except ZeroDivisionError:print("除数不能为0")except Exception as e: print(e)