当前位置: 首页 > news >正文

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!’]重复字符串、列表、元组
in3 in (1, 2, 3)True元素是否存在字符串、列表、元组、字典
not in4 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、乘法符号错误等异常的提示;数据结构的涉及比较简单,仅仅需要存储数据结果。

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

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)
http://www.xdnf.cn/news/1123543.html

相关文章:

  • 【深度学习框架终极PK】TensorFlow/PyTorch/MindSpore深度解析!选对框架效率翻倍
  • JavaScript中Object.defineProperty的作用和用法以及和proxy的区别
  • SSM框架学习——day1
  • Datawhale AI夏令营-基于带货视频评论的用户洞察挑战赛
  • AI Linux 运维笔记
  • Imx6ull用网线与电脑连接
  • 使用 pytest 测试框架构建自动化测试套件之一
  • ethers.js-5–和solidity的关系
  • pytorch学习1(DataSet+Transforms+TensorBoard)
  • LeetCode 692题解 | 前K个高频单词
  • 工业软件加密锁复制:一场技术与安全的博弈
  • Lovable - AI 驱动的全栈应用开发平台
  • PyTorch张量(Tensor)创建的方式汇总详解和代码示例
  • [笔记] 动态 SQL 查询技术解析:构建灵活高效的企业级数据访问层
  • Linux:1_Linux下基本指令
  • TCP心跳机制详解
  • 使用axios向服务器请求信息并渲染页面
  • 如何在服务器上运行一个github项目
  • K8S的平台核心架构思想[面向抽象编程]
  • docker私有仓库
  • Ai问答之空间站星等
  • 【科研绘图系列】R语言绘制世界地图
  • C++ 中常见的字符串定义方式及其用法
  • 使用Java完成下面项目
  • 解决chrome v2 版本插件不支持
  • uni-app在安卓设备上获取 (WIFI 【和】以太网) ip 和 MAC
  • C语言-数据输入与输出
  • java学习 day4 分布式锁
  • 【Learning Notes】 Derak Callan‘s Business English P38~40
  • 【【异世界历险之数据结构世界(二叉树)】】