✅包含编程资料、学习路线图、源代码、软件安装包等!【[点击这里]】! 第一部分:for循环 什么是for循环? for循环用于重复执行某项操作或遍历数据集中的每个元素。 在什么时候需要用到循环? for循环基本语法: 1 for 临时变量in 可迭代序列: 2 循环中的执行语句1 3 循环中的执行语句2 4 . . . 语法分解说明: for:Python中的关键字,用于声明一个for循环。 临时变量:在每次迭代中,这个变量会被指向某个数据中的下一个元素。它是一个局部变量,仅在循环体内有效。 in:Python中的关键字,用于指定循环将遍历的序列。 可迭代序列:任何可以迭代的数据,如列表、元组、字符串、字典等。(本节课仅涉及字符串和range函数的使用) 循环中的执行语句:在每次迭代中执行的代码块。可以是一条或多条语句,它们被缩进以表示它们属于循环体。 比如:如果某一个数据中的元素,需要被逐个循环调用。 1 a= 'abcefgh' 2 for iin a: # i是临时变量;a是可迭代序列 3 print ( i) 遍历结果:
比如:如果某一项操作,需要重复执行。 1 a= 'abcefgh' 2 for iin a: 3 print ( "我爱编程" ) 操作结果: 根据运行结果的图片,可以看到a这个字符串有 7 个字符,print(“我爱编程”)就被执行了 7 次。 循环次数由数据集的元素个数决定。下面介绍一个range()函数,它用于生成一个指定范围的有序整数数组,方便指定循环次数。 range()函数 作用:生成一个指定范围内的有效整数数组,方便指定循环次数。 语法:range(开始数字, 结束数字) 两个参数示例: 1 for iin range ( 1 , 10 ) : 2 print ( i) 示例运行结果: 可以看到使用for循环从range(1, 10)中,获取了1~9的数字。 因此,可以得到range()函数有范围要求。 范围:range()函数包头不含尾(左闭右开区间)。
range()函数是可以只传递一个数据的。上面的示例已经展示了两个参数的用法。下面是单个参数的情况: 单个参数示例: 1 for iin range ( 5 ) : 2 print ( i) 运行结果:
从运行结果可知。range(5)生成从0开始到4的整数序列。从而得知,range()函数没有指定开始值的时候,默认从0开始,一直到指定值前一个值结束(符合包头不含尾的特性)。
综合案例讲解: 1.反转字符串 1 # 定义一个需要反转的字符串。 2 a= "I love Python" 3 # 在定义一个空字符串,用于存储反转后的字符。 4 b= "" 5 6 # 利用for循环将字符串种的每个字符添加到b的前面 7 for iin a: 8 b= i+ b# 注意:i每次都加在b前面。所以,最新拿到的字符会出现在字符串最前面,实现反转。 9 10 # 打印反转后的字符串。 11 print ( b) 运行结果为:
2.过滤字符串中的空格 上一节课学习了if判断,我们结合for循环使用。完成字符串过滤。 1 a= "Hello World 哈哈哈哈哈哈" 2 b= "" 3 4 for iin a: 5 if i!= ' ' : #只有当i不等于空格时才会进行判断里面的拼接操作 6 b+= i7 8 print ( "过滤后的字符串:" , b) 运行结果:
3.计算连续整数的累加和累乘 使用 for 循环和 range() 函数来计算连续整数的累加和累乘。 1 # 连续整数的累加: 1-100 2 sum_= 0 3 for iin range ( 1 , 101 ) : 4 sum_+= i# 等价于:sum_ = sum_ + i 5 6 print ( "总和:" , sum_) 7 8 # 连续整数的累乘 9 product= 1 10 for iin range ( 1 , 101 ) : 11 product*= i# 等价于:product = product * i 12 13 print ( "累乘结果:" , product) 这里插入介绍一下两个赋值运算符: +=(加法赋值运算符)和*=(乘法赋值运算符) += 加法赋值运算符:a += b 等价于 a = a + b。这个运算符用于将变量的当前值与右侧的值相加,并将结果重新赋值给该变量。例如: 1 # 初始化变量 a 为 1 2 a= 1 3 print ( f"初始值: a = { a} " ) 4 5 # 使用 += 运算符,将 a 的值增加 2 6 a+= 2 7 print ( f"使用 += 后: a = { a} " ) # 输出为: 3 运行结果:可以看到效果等同于a = a + 2。
*= 乘法赋值运算符:a *= b 等价于 a = a * b。这个运算符用于将变量的当前值与右侧的值相乘,并将结果重新赋值给该变量。示例: 1 # 初始化变量 a 为 2 2 a= 2 3 print ( f"初始值: a = { a} " ) 4 5 # 使用 *= 运算符,将 a 的值乘以 3 6 a*= 3 7 print ( f"使用 *= 后: a = { a} " ) # 输出应该是 6 运行结果:可以看到效果等同于 a = a * 3。
我们继续看累加和累乘的结果:
4.结合 if 语句进行条件判断 使用 for 循环和 if 语句找出1到100之间的3、5、7的倍数。 1 for numin range ( 1 , 101 ) : 2 if num% 3 == 0 : 3 print ( num, "是3的倍数~" ) 4 if num% 5 == 0 : 5 print ( num, "是5的倍数~" ) 6 if num% 7 == 0 : 7 print ( num, "是7的倍数~" ) 运行结果将为:
第二部分:交换变量 变量交换是编程中常见的操作。在Python中,变量交换可以通过下面的方式实现。 错误的变量交换: 见示例,直接使用a = b 和 b = a进行交换,会怎样呢? 1 # 错误的交换变量: 2 a= 1 3 b= 2 4 # 要求a,b值互换,怎么实现? 5 a= b# a 变成 2(原始值 1 丢失) 6 b= a# b 也变成 2(此时 a 已经是 2) 7 print ( a) # 输出 2 8 print ( b) # 输出 2 运行结果:可以看到a和b的结果都是2
错误分析: 代码中 a = b 后,a 的值变为 2,此时 a 的原始值 1 丢失。 接着 b = a 时,a 已经是 2,因此 b 也被赋值为 2,导致交换失败。 正确用法:第一种-使用临时变量 引入一个临时变量,用来存储其中一个变量的值,然后进行交换。 1 a= 1 2 b= 3 3 4 # 使用临时变量交换 5 temp= a6 a= b7 b= temp8 9 print ( "a =" , a) # 输出: a = 3 10 print ( "b =" , b) # 输出: b = 1 运行结果:从运行结果可以看到,变量交换成功。
正确用法:第二种-利用python语法 1 a= 1 2 b= 3 3 4 # 利用Python语法特点。 5 a, b= b, a6 7 print ( "a =" , a) # 输出: a = 3 8 print ( "b =" , b) # 输出: b = 1 运行结果:
第三部分:异常捕获 案例讲解: 1.捕获类型转换错误 示例:将用户输入的字符串转换为整数。 但如果用户输入的是非整型的数据,在不使用try语句的情况下,系统会在控制台提示错误原因。 1 a= input ( "输入一个数字:" ) 2 a= int ( a) # 转换为整数类型 3 '''接下来,我们在控制台内输入非整数字类型的''' 运行结果:会出现如图所示报错。 其中ValueError是错误类型,invalid literal for int() with base 10: 'aaa’是对错误类型的解释。 我们接下来使用try语句对异常错误进行捕获。 1 a= input ( "输入一个数字:" ) 2 3 try : 4 a= int ( a) 5 except ValueErroras v: # 从前面的运行代码中,可以知道错误类型是ValueError,所以使用了这个类型并用as重命名错误类型为v 6 print ( v) # 打印捕获的错误信息 7 print ( "您输入的数据无法转换!" ) # 其它的处理... 8 '''我们再次输入非整数字类型的,观察运行结果''' 运行结果:在使用了异常捕获语句的情况下,成功捕获异常,让程序正常结束。
最后,我们使用try…except…else…finally的语句,进行其它操作,见完整示例: 1 a= input ( '请输入1个数字:' ) 2 try : 3 a= int ( a) 4 print ( a) # 打印输入的内容 5 except Exceptionas e: # Exception-是用来捕获所有错误类型的,取别名为e 6 print ( e) # 打印捕获的错误 7 print ( '该元素不能转换为整数类型' ) 8 else : 9 b= a+ 1 # 简单对a变量进行操作 10 print ( b) # 打印b 11 finally : 12 print ( '运行结束' ) 输入正确数字的运行结果:
输入错误数据的运行结果:
总结: 在这个示例中,程序尝试将用户输入的字符串转换为整数。 如果转换失败(例如,用户输入了非数字字符),则会引发ValueError异常。 except块捕获这个异常,并打印错误信息和提示信息。 else块在没有异常发生时执行,而finally块无论是否发生异常都会执行。 通过案例我们总结下异常捕获语法: 1 try : 2 # 可能引发异常的代码 3 except ExceptionTypeas e: # ExceptionType-指具体的错误类型,可以使用as语句重命名为e,e是一个自定义的变量名。 4 # 报错发生后,运行的代码。 5 else : 6 # 如果try块中没有发生异常,执行这里的代码 7 finally : 8 # 不管有没有发生异常都会执行的代码 使用异常捕获语句的意义: 我们在运行代码的时候,会因为错误而终止运行。使用try语句捕获异常,代码不会因为报错而停止运行。 还可以利用try语句,将错误提示,通过用户易于理解的方式展示。 【案例】for循环 + 异常捕获语句获取字符串中数字的倒数 字符串为:strs = ‘abc123def456’ 什么是倒数: 一个数的倒数是指这个数相乘结果为1的数; 假设某数为x(不能是0),那么它的倒数就是1/x; 比如2的倒数就是1/2,等于0.5。0.5的倒数就是2。 1 strs= 'abc123def4560' 2 for iin strs: 3 try : 4 i= int ( i) 5 result= 1 / i6 except Exceptionas e: # Exception包含所有错误。也可以分别获取,使用ValueError和ZeroDivisionError。 7 print ( i, "不能得到倒数" ) 8 # print(i) 9 else : 10 print ( "倒数:" , result) 11 finally : 12 print ( '计算结束' ) 13 14 """分开Exception的写法""" 15 for iin strs: 16 try : 17 # 尝试将字符转换为整数 18 num= int ( i) 19 # 计算倒数 20 result= 1 / num21 except ValueError: 22 # 如果字符不是数字,则会抛出ValueError异常 23 print ( "字符" , i, "不是数字,不能计算倒数" ) 24 except ZeroDivisionError: 25 # 如果数字是0,则会抛出ZeroDivisionError异常 26 print ( "数字" , i, "的倒数无法计算,因为除以零是不允许的" ) 27 else : 28 # 成功计算了倒数 29 print ( num, "的倒数是:" , result) 30 finally : 31 # 无论是否发生异常都会执行 32 print ( '计算结束' ) 运行结果:
不同异常的对应处理: 为什么需要捕获特定的错误类型? 在异常处理中,使用精准的错误类型(如 TypeError、ValueError)而非笼统的 Exception,是编写健壮代码的关键。 例如: a.它可以精准的修复问题,不同的错误,不同的处理;比如: 1 try : 2 num= int ( input ( "请输入数字:" ) ) 3 except ValueError: # 明确处理非数字输入 4 print ( "输入的不是数字!" ) b.避免因为使用Exception隐藏了严重错误。 i.比如:内存不足的错误(MemoryError),应让程序崩溃以便及时调试。; c.如果有多种错误类型捕获,使用分层捕获的方式能让代码结构清晰易于维护。 1 # 分层捕获一目了然 2 try : 3 num1= int ( input ( "请输入第一个数字:" ) ) # 可能触发 ValueError(如输入"abc") 4 num2= int ( input ( "请输入第二个数字:" ) ) 5 result= num1/ num2# 可能触发 ZeroDivisionError(如 num2=0) 6 except ValueError: 7 print ( "错误!请输入整数,不要输入文字!" ) 8 except ZeroDivisionError: 9 print ( "错误!除数不能为零!" ) 总结:精准捕获 = 快速定位问题 + 避免意外崩溃 + 代码简洁。 接下来,我们具体学习部分常见错误类型的处理方法。 1.TypeError(类型错误) 1 try : 2 a= 5 + '10' 3 except TypeErroras e: 4 print ( e) 运行结果: 数字类型和字符串类型是不可相加的,所以他们操作会引发TypeError。异常捕获时使用TypeError这个名称。 2.ValueError(值错误) 当函数或操作的参数具有正确的类型但不合法时引发。 譬如: 1 try : 2 num= int ( 'abc' ) 3 except ValueErroras e: 4 print ( e) 运行结果: 'abc’是字符串类型,int()函数是无法转换字符串类型的,所以引发ValueError。 异常捕获时使用ValueError这个名称。 3.NameError(名称错误) 当尝试访问一个未定义的变量时,会抛出NameError异常。 1 try : 2 print ( x) 3 except NameErroras e: 4 print ( e) 运行结果: 假设x是一个变量,但是前面对它并没有任何定义。这里尝试访问它,引发NameError的错误。 异常捕获时使用NameError这个名称。 4.IndexError(索引错误) 当尝试访问列表、元组或字符串中不存在的索引时引发。 (列表、元组的数据类型讲解,后面的课程有,这里只了解这个错误类型) 1 a= [ 1 , 2 , 3 ] 2 try : 3 print ( a[ 3 ] ) 4 except IndexErroras e: 5 print ( e) 运行结果: 在这个示例中,列表a只有三个元素(索引为0到2),尝试访问索引为3的元素将引发IndexError。 异常捕获时使用IndexError这个名称。 5.KeyError(键错误) 当尝试访问字典中不存在的键时引发 (字典数据类型,在后面的课程中会讲解,这里了解这个错误类型) 异常捕获时使用KeyError这个名称。 1 d= { 'a' : 1 , 'b' : 2 } 2 try : 3 print ( d[ 'c' ] ) 4 except KeyErroras e: 5 print ( e, "不存在的键" ) 运行结果: 字典d中没有键’c’,尝试访问它将引发KeyError。 6.ZeroDivisionError(除零错误) 1 try : 2 a= 5 / 0 3 except ZeroDivisionErroras e: 4 print ( e) 运行结果: 除数为0,会引发ZeroDivisionError。所以异常捕获时,使用ZeroDivisionError进行捕获。 7.IOError(输入/输出错误) 1 try : 2 f= open ( 'test.txt' , 'r' ) # 这个test.txt在项目中不存在 3 except IOErroras e: 4 print ( e) 运行结果: 打开一个不存在的文件’test.txt’,引发IOError。使用IOError捕获异常。 8.ImportError(导入错误) 当尝试导入不存在的模块或包时引发。导入一个不存在的模块hahahaha,会引发ImportError。 1 try : 2 import hahahaha3 except ImportErroras e: 4 print ( e) 运行结果:
9.AttributeError(属性错误) 当尝试访问对象不存在的属性时引发。 字符串对象s没有hahahaha方法,尝试调用它将引发AttributeError。 1 s= 'aaa' 2 try : 3 s. hahahaha( ) 4 except AttributeErroras e: 5 print ( e) 运行结果: 使用AttributeError捕获。 10.KeyboardInterrupt(键盘中断) 1 input ( '请输入:' ) # 不捕获,中断输入的报错 2 try : 3 input ( '请输入:' ) 4 except KeyboardInterruptas e: 5 print ( e) 运行结果: 用户在程序等待输入时按下中断的程序,引发KeyboardInterrupt。使用异常捕获语句捕获结果: 中断方式
KeyboardInterrupt报错
捕获KeyboardInterrupt
➕其它错误类型 python中的异常类型还有许多,甚至可以自定义异常类型。可以通过官方文档了解异常处理机制和各种异常类型。这里就不细细讲解了。 官网文档链接:https://docs.python.org/3.9/tutorial/errors.html 注意点: 不要使用错误的类型取捕获异常, 如果是不确定的异常,可以使用Exception。 下面我使用ValueError捕获TypeError的异常,示例: 1 """下面这个示例,在上面【TypeError(类型错误)】有讲解""" 2 """这里用ValueError的错误类型,尝试运行""" 3 try : 4 a= 5 + '10' 5 except ValueErroras e: 6 print ( e) 运行结果: 可以看到,捕获失败,因为try语句块中,没用ValueError的错误。因此仍然会在程序中出错。 这时,我可以使用Exception捕获错误: 1 try : 2 a= 5 + '10' 3 except Exceptionas e: 4 print ( e) 运行结果:
捕获怎样的错误类型,与自己写的程序有关。 如果有些异常你并不需要精准的捕获具体的错误类型,只需要把当前的错误捕获并处理,那么使用Exception就好。 如果需要精准捕获到特定类型的错误,那就可以使用对应错误类型进行捕获。(例如:ValueError、TypeError、NameError) 【最后】-拓展复合赋值运算符 我们在for循环的案例讲解中,简单了解到了两个复合赋值运算符,即+=(加法赋值运算符)和*=(乘法赋值运算符)。 这里在增加讲解下其它的赋值运算符: 注意事项示例:先计算后赋值。先计算“=”右边的,再复合赋 值计算。 1 a= 2 2 a*= 2 + 3 # 等价于:a = a * (2 + 3) 3 print ( a) # 输出: 10 运行结果: 运算前,您可能以为是a = 2 * 2 +3 = 7;实际上是先计算了2+3=5;然后在是a = 25,也就是等于 a = (a 2) +3;输出结果为:10。 🟢总结 最后希望你编程学习上不急不躁,按照计划有条不紊推进,把任何一件事做到极致,都是不容易的,加油,努力!相信自己! 🟡文末福利 最后这里免费分享给大家一份Python全套学习资料,希望能帮到那些不满现状,想提升自己却又没有方向的朋友,也可以和我一起来学习交流呀。 🔴包含编程资料、学习路线图、源代码、软件安装包等!【点击这里】领取! ① Python所有方向的学习路线图,清楚各个方向要学什么东西 ② 100多节Python课程视频,涵盖必备基础、爬虫和数据分析 ③ 100多个Python实战案例,学习不再是只会理论 ④ 华为出品独家Python漫画教程,手机也能学习 ✅可以扫描下方二维码领取【保证100%免费 】