人工智能之编程基础 Python 入门
第四章 条件循环与异常
@
目录
- [人工智能之编程基础 Python 入门](#人工智能之编程基础 Python 入门)
- 前言
- 条件语句
- 基本语法
- 示例
- [1. 简单的
if语句](#1. 简单的 if 语句)- [2.
if-else语句](#2. if-else 语句)- [3.
if-elif-else语句 (处理多个条件)](#3. if-elif-else 语句 (处理多个条件))- [4. 嵌套的
if语句](#4. 嵌套的 if 语句)- 真值测试 (Truthiness)
- 循环语句
- 错误与异常
- [1. 语法错误 (Syntax Errors)](#1. 语法错误 (Syntax Errors))
- [2. 异常 (Exceptions)](#2. 异常 (Exceptions))
- [3. 异常处理](#3. 异常处理)
- [4. 抛出异常](#4. 抛出异常)
- [5. 自定义异常](#5. 自定义异常)
- [6. 最佳实践](#6. 最佳实践)
- 总结
- 资料关注
前言
本章节紧接上一章内容继续学习python的基本语法结构,主要学习条件语句、循环语句以及错误异常的处理方式。
条件语句
Python 中的条件语句用于根据不同的条件执行不同的代码块。主要的条件语句是 if、elif(else if 的缩写)和 else。
基本语法
python
if 条件1:
# 条件1为真时执行的代码
语句块1
elif 条件2:
# 条件1为假,且条件2为真时执行的代码
语句块2
else:
# 所有前面的条件都为假时执行的代码
语句块3
关键点:
- 冒号 (
:) : 每个if,elif,else语句后面必须跟一个冒号。 - 缩进: 冒号后面的代码块必须缩进(通常使用 4 个空格)。Python 通过缩进来判断哪些代码属于哪个条件分支。
elif和else是可选的 : 你可以只有if,也可以有if-else或if-elif-else链。- 条件求值 : 条件表达式的结果会被转换为布尔值 (
True或False)。
示例
1. 简单的 if 语句
python
age = 18
if age >= 18:
print("你已成年,可以投票!")
print("程序结束。") # 这行代码总是会执行
输出:
你已成年,可以投票!
程序结束。
2. if-else 语句
python
age = 16
if age >= 18:
print("你已成年,可以投票!")
else:
print("你还未成年,需要等待。")
print("程序结束。")
输出:
你还未成年,需要等待。
程序结束。
3. if-elif-else 语句 (处理多个条件)
python
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
4. 嵌套的 if 语句
python
age = 20
has_license = True
if age >= 18:
if has_license:
print("你可以合法驾驶。")
else:
print("你年龄够了,但需要先考驾照。")
else:
print("你还太小,不能驾驶。")
输出:
你可以合法驾驶。
真值测试 (Truthiness)
在 Python 中,很多值在条件语句中会被自动转换为布尔值:
- 被认为是
False的值 (falsy):FalseNone- 数值零:
0,0.0 - 空序列:
"",[],(),{} - 空集合:
set()
- 其他所有值都被认为是
True(truthy):True- 非零数值
- 非空字符串、列表、元组、字典等
示例:
python
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 循环。
1. for 循环
for 循环用于遍历序列(如列表、元组、字符串)或其他可迭代对象。
基本语法
python
for 变量 in 序列:
# 循环体
语句块
示例
python
# 遍历列表
fruits = ["苹果", "香蕉", "橙子"]
for fruit in fruits:
print(fruit)
输出:
苹果
香蕉
橙子
python
# 遍历字符串
word = "Python"
for letter in word:
print(letter)
输出:
P
y
t
h
o
n
python
# 使用 range() 函数
for i in range(5): # range(5) 生成 0, 1, 2, 3, 4
print(i)
输出:
0
1
2
3
4
python
# range(start, stop, step)
for i in range(1, 10, 2): # 从1开始,到10结束(不包含10),步长为2
print(i)
输出:
1
3
5
7
9
2. while 循环
while 循环在条件为 True 时重复执行代码块。
基本语法
python
while 条件:
# 循环体
语句块
# 更新条件,避免无限循环
示例
python
# 计数器循环
count = 0
while count < 5:
print(count)
count += 1 # 重要:更新条件变量,否则会无限循环
输出:
0
1
2
3
4
python
# 用户输入循环
user_input = ""
while user_input.lower() != "退出":
user_input = input("请输入命令(输入'退出'结束): ")
print(f"你输入了: {user_input}")
3. 循环控制语句
break: 立即退出循环。continue: 跳过当前迭代,继续下一次迭代。
示例
python
# 使用 break
for i in range(10):
if i == 5:
break
print(i)
输出:
0
1
2
3
4
python
# 使用 continue
for i in range(5):
if i == 2:
continue
print(i)
输出:
0
1
3
4
4. else 子句
for 和 while 循环都可以有一个可选的 else 子句。当循环正常结束(没有被 break 中断)时,else 子句会执行。
示例
python
# for-else
for i in range(3):
print(i)
else:
print("循环正常结束")
输出:
0
1
2
循环正常结束
python
# for-else with break
for i in range(5):
if i == 3:
break
print(i)
else:
print("循环正常结束") # 这行不会执行,因为循环被break了
print("循环结束")
输出:
0
1
2
循环结束
5. 嵌套循环
循环内部可以包含另一个循环。
示例
python
# 打印乘法表
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
6. 实用技巧
遍历时获取索引
python
fruits = ["苹果", "香蕉", "橙子"]
for index, fruit in enumerate(fruits):
print(f"索引 {index}: {fruit}")
输出:
索引 0: 苹果
索引 1: 香蕉
索引 2: 橙子
同时遍历多个序列
python
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)**。理解它们的区别和处理方法对于编写健壮的程序至关重要。
1. 语法错误 (Syntax Errors)
语法错误发生在 Python 解释器解析代码时,发现代码不符合 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'
语法错误的特点:
- 发生在程序运行之前
- Python 解释器会指出错误的行号和类型
- 必须修正后程序才能运行
2. 异常 (Exceptions)
异常是在程序运行过程中发生的错误,此时代码的语法是正确的,但在执行时遇到了问题(如除零、访问不存在的文件等)。
常见的异常类型:
| 异常类型 | 描述 | 示例 |
|---|---|---|
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") |
异常示例:
python
# 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
3. 异常处理
Python 提供了 try-except 语句来处理异常,让程序在遇到错误时不会崩溃,而是执行预设的错误处理代码。
基本语法:
python
try:
# 可能出现异常的代码
可能出错的代码
except ExceptionType:
# 处理特定异常的代码
错误处理代码
except AnotherExceptionType:
# 处理另一种异常
错误处理代码
else:
# 没有异常时执行的代码(可选)
无异常时的代码
finally:
# 无论是否有异常都会执行的代码(可选)
最终清理代码
示例:
python
# 基本异常处理
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("程序执行完毕。")
python
# 捕获所有异常
try:
# 一些可能出错的代码
file = open("nonexistent.txt", "r")
except:
print("发生了某种错误!")
python
# 捕获异常对象
try:
numbers = [1, 2, 3]
print(numbers[10])
except IndexError as e:
print(f"索引错误: {e}")
4. 抛出异常
可以使用 raise 语句手动抛出异常。
python
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}")
5. 自定义异常
可以创建自定义异常类来处理特定的错误情况。
python
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}")
6. 最佳实践
- 具体化异常处理 :尽量捕获具体的异常类型,而不是使用通用的
except。 - 避免空的 except 块:至少要记录错误或采取适当的措施。
- 使用 finally 进行清理 :在
finally块中进行资源清理工作。 - 不要忽略异常:即使不处理,也要记录下来。
python
# 好的做法
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》