第四章 条件循环与异常
本章节紧接上一章内容继续学习python的基本语法结构,主要学习条件语句、循环语句以及错误异常的处理方式。
Python 中的条件语句用于根据不同的条件执行不同的代码块。主要的条件语句是
if、
elif(else if 的缩写)和
else。
if 条件
1:
# 条件1为真时执行的代码
语句块
1
elif 条件
2:
# 条件1为假,且条件2为真时执行的代码
语句块
2
else:
# 所有前面的条件都为假时执行的代码
语句块
3
关键点:
:)**: 每个
if,
elif,
else 语句后面必须跟一个冒号。elif 和
else 是可选的**: 你可以只有
if,也可以有
if-else 或
if-elif-else 链。True 或
False)。if 语句
age =
18
if age >=
18:
print(
"你已成年,可以投票!")
print(
"程序结束。")
# 这行代码总是会执行
输出:
你已成年,可以投票!
程序结束。
if-else 语句
age =
16
if age >=
18:
print(
"你已成年,可以投票!")
else:
print(
"你还未成年,需要等待。")
print(
"程序结束。")
输出:
你还未成年,需要等待。
程序结束。
if-elif-else 语句 (处理多个条件)
score =
85
if score >=
90:
grade =
'A'
elif score >=
80:
# 注意:因为score<90才会到这里,所以这里只需检查>=80
grade =
'B'
elif score >=
70:
grade =
'C'
elif score >=
60:
grade =
'D'
else:
grade =
'F'
print(
f"你的成绩等级是:
{grade}")
输出:
你的成绩等级是: B
if 语句
age =
20
has_license =
True
if age >=
18:
if has_license:
print(
"你可以合法驾驶。")
else:
print(
"你年龄够了,但需要先考驾照。")
else:
print(
"你还太小,不能驾驶。")
输出:
你可以合法驾驶。
在 Python 中,很多值在条件语句中会被自动转换为布尔值:
False 的值 (falsy):FalseNone0,
0.0"",
[],
(),
{}set()True (truthy):True示例:
my_list = [
1,
2,
3]
if my_list:
# 检查列表是否非空,比 len(my_list) > 0 更Pythonic
print(
"列表不为空,包含元素:", my_list)
else:
print(
"列表为空。")
name =
""
if name:
# 检查字符串是否非空
print(
f"你好,
{name}!")
else:
print(
"名字不能为空。")
输出:
列表不为空,包含元素: [1, 2, 3]
名字不能为空。
Python 中的循环语句用于重复执行一段代码,直到满足某个条件为止。主要有两种类型的循环:
for 循环和
while 循环。
for 循环
for 循环用于遍历序列(如列表、元组、字符串)或其他可迭代对象。
for 变量
in 序列:
# 循环体
语句块
# 遍历列表
fruits = [
"苹果",
"香蕉",
"橙子"]
for fruit
in fruits:
print(fruit)
输出:
苹果
香蕉
橙子
# 遍历字符串
word =
"Python"
for letter
in word:
print(letter)
输出:
P
y
t
h
o
n
# 使用 range() 函数
for i
in
range(
5):
# range(5) 生成 0, 1, 2, 3, 4
print(i)
输出:
0
1
2
3
4
# range(start, stop, step)
for i
in
range(
1,
10,
2):
# 从1开始,到10结束(不包含10),步长为2
print(i)
输出:
1
3
5
7
9
while 循环
while 循环在条件为
True 时重复执行代码块。
while 条件:
# 循环体
语句块
# 更新条件,避免无限循环
# 计数器循环
count =
0
while count <
5:
print(count)
count +=
1
# 重要:更新条件变量,否则会无限循环
输出:
0
1
2
3
4
# 用户输入循环
user_input =
""
while user_input.lower() !=
"退出":
user_input =
input(
"请输入命令(输入'退出'结束): ")
print(
f"你输入了:
{user_input}")
break: 立即退出循环。continue: 跳过当前迭代,继续下一次迭代。
# 使用 break
for i
in
range(
10):
if i ==
5:
break
print(i)
输出:
0
1
2
3
4
# 使用 continue
for i
in
range(
5):
if i ==
2:
continue
print(i)
输出:
0
1
3
4
else 子句
for 和
while 循环都可以有一个可选的
else 子句。当循环正常结束(没有被
break 中断)时,
else 子句会执行。
# for-else
for i
in
range(
3):
print(i)
else:
print(
"循环正常结束")
输出:
0
1
2
循环正常结束
# for-else with break
for i
in
range(
5):
if i ==
3:
break
print(i)
else:
print(
"循环正常结束")
# 这行不会执行,因为循环被break了
print(
"循环结束")
输出:
0
1
2
循环结束
循环内部可以包含另一个循环。
# 打印乘法表
for i
in
range(
1,
4):
for j
in
range(
1,
4):
print(
f"
{i} *
{j} =
{i * j}", end=
" ")
print()
# 换行
输出:
1 * 1 = 1 1 * 2 = 2 1 * 3 = 3
2 * 1 = 2 2 * 2 = 4 2 * 3 = 6
3 * 1 = 3 3 * 2 = 6 3 * 3 = 9
fruits = [
"苹果",
"香蕉",
"橙子"]
for index, fruit
in
enumerate(fruits):
print(
f"索引
{index}:
{fruit}")
输出:
索引 0: 苹果
索引 1: 香蕉
索引 2: 橙子
names = [
"Alice",
"Bob",
"Charlie"]
ages = [
25,
30,
35]
for name, age
in
zip(names, ages):
print(
f"
{name} 今年
{age} 岁")
输出:
Alice 今年 25 岁
Bob 今年 30 岁
Charlie 今年 35 岁
在 Python 编程中,错误主要分为两类: 语法错误(Syntax Errors) 和 **异常(Exceptions)**。理解它们的区别和处理方法对于编写健壮的程序至关重要。
语法错误发生在 Python 解释器解析代码时,发现代码不符合 Python 的语法规则。这类错误会在程序运行前就被检测出来,导致程序无法启动。
# 1. 缺少冒号
if x >
5
print(
"x is greater than 5")
# 2. 括号不匹配
print(
"Hello World"
# 3. 缩进错误
if x >
5:
print(
"x is greater than 5")
# 缺少缩进
# 4. 引号不匹配
message =
"Hello World'
语法错误的特点:
异常是在程序运行过程中发生的错误,此时代码的语法是正确的,但在执行时遇到了问题(如除零、访问不存在的文件等)。
| 异常类型 | 描述 | 示例 |
ZeroDivisionError |
除以零 |
10 / 0 |
NameError |
变量名未定义 |
print(undefined_variable) |
TypeError |
操作或函数应用于不适当类型的对象 |
"hello" + 5 |
ValueError |
操作或函数接收到类型正确但值不合适的参数 |
int("hello") |
IndexError |
序列中没有此索引 |
my_list[10](列表长度不足) |
KeyError |
字典中没有此键 |
my_dict["missing_key"] |
FileNotFoundError |
文件未找到 |
open("nonexistent.txt") |
# ZeroDivisionError
print(
10 /
0)
# ZeroDivisionError: division by zero
# ValueError
int(
"hello")
# ValueError: invalid literal for int() with base 10: 'hello'
# IndexError
my_list = [
1,
2,
3]
print(my_list[
5])
# IndexError: list index out of range
Python 提供了
try-except 语句来处理异常,让程序在遇到错误时不会崩溃,而是执行预设的错误处理代码。
try:
# 可能出现异常的代码
可能出错的代码
except ExceptionType:
# 处理特定异常的代码
错误处理代码
except AnotherExceptionType:
# 处理另一种异常
错误处理代码
else:
# 没有异常时执行的代码(可选)
无异常时的代码
finally:
# 无论是否有异常都会执行的代码(可选)
最终清理代码
# 基本异常处理
try:
x =
int(
input(
"请输入一个数字: "))
result =
10 / x
print(
f"结果是:
{result}")
except ValueError:
print(
"输入的不是有效数字!")
except ZeroDivisionError:
print(
"不能除以零!")
except Exception
as e:
print(
f"发生了未预期的错误:
{e}")
else:
print(
"计算成功完成!")
finally:
print(
"程序执行完毕。")
# 捕获所有异常
try:
# 一些可能出错的代码
file =
open(
"nonexistent.txt",
"r")
except:
print(
"发生了某种错误!")
# 捕获异常对象
try:
numbers = [
1,
2,
3]
print(numbers[
10])
except IndexError
as e:
print(
f"索引错误:
{e}")
可以使用
raise 语句手动抛出异常。
def
validate_age(
age):
if age <
0:
raise ValueError(
"年龄不能为负数")
if age >
150:
raise ValueError(
"年龄不能超过150")
return
True
try:
validate_age(-
5)
except ValueError
as e:
print(
f"验证失败:
{e}")
可以创建自定义异常类来处理特定的错误情况。
class
CustomError(
Exception):
"""自定义异常类"""
pass
class
AgeError(
Exception):
"""年龄相关的异常"""
def
__init__(
self, message):
self.message = message
super().__init__(
self.message)
try:
raise AgeError(
"年龄不在有效范围内")
except AgeError
as e:
print(
f"自定义异常:
{e.message}")
except。finally 块中进行资源清理工作。
# 好的做法
try:
file =
open(
"data.txt",
"r")
content = file.read()
except FileNotFoundError:
print(
"文件未找到")
except PermissionError:
print(
"没有权限访问文件")
finally:
if
'file'
in
locals()
and
not file.closed:
file.close()
本文主要对python的条件循环以及错误语法的叙述与实践,下一章节会学习python的基本数据结构,以及基本数据结构的用法,它们之间的相互转换,和迭代生成。
相关资料全部免费获取:
欢迎关注公众号:咚咚王
《Python编程:从入门到实践》
《利用Python进行数据分析》
《算法导论中文第三版》
《概率论与数理统计(第四版) (盛骤) 》
《程序员的数学》
《线性代数应该这样学第3版》
《微积分和数学分析引论》
《(西瓜书)周志华-机器学习》
《TensorFlow机器学习实战指南》
《Sklearn与TensorFlow机器学习实用指南》
《模式识别(第四版)》
《深度学习 deep learning》伊恩·古德费洛著 花书
《Python深度学习第二版(中文版)【纯文本】 (登封大数据 (Francois Choliet)) (Z-Library)》
《深入浅出神经网络与深度学习+(迈克尔·尼尔森(Michael+Nielsen) 》
《自然语言处理综论 第2版》
《Natural-Language-Processing-with-PyTorch》
《计算机视觉-算法与应用(中文版)》
《Learning OpenCV 4》
《AIGC:智能创作时代》杜雨+&+张孜铭
《AIGC原理与实践:零基础学大语言模型、扩散模型和多模态模型》
《从零构建大语言模型(中文版)》
《实战AI大模型》
《AI 3.0》
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70048224/viewspace-3099429/ ,如需转载,请注明出处,否则将追究法律责任。