在Python中,分支和循环是控制程序流程的基本结构,它们允许程序根据条件执行不同的代码块,或者重复执行某个代码块直到满足特定条件。下面将详细解释这两种结构。
分支结构
分支结构根据条件的不同来执行不同的代码块。Python中主要通过if
、elif
(else if的缩写)、else
语句来实现分支。
基本语法
if 条件表达式:
# 条件为真时执行的代码块
elif 条件表达式2:
# 条件表达式为假,且条件表达式2为真时执行的代码块
else:
# 所有前面的条件都为假时执行的代码块
除了基本语法外,还有一个特殊的用法:
条件为真时执行的语句 if condition else 条件为假时执行的语句
示例
age = 20
if age < 18:
print("未成年")
elif age == 18:
print("刚成年")
else:
print("已成年")
循环结构
循环结构允许你重复执行一段代码块直到满足某个条件。Python提供了几种循环结构,包括for
循环和while
循环。
For循环
for
循环用于遍历任何序列(如列表、元组或字符串)或其他可迭代对象。
基本语法
for 变量 in 可迭代对象:
# 循环体
示例
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)
可迭代对象
Python中的可迭代对象(Iterable)是一个核心概念,它允许你遍历(即一个接一个地访问)容器中的元素,而无需了解容器的内部结构。
常见的可迭代对象
Python中大多数内置容器类型都是可迭代对象,包括:
- 列表(List):
- 迭代元素:列表中的项(items),按插入顺序进行迭代。
- 元组(Tuple):
- 迭代元素:元组中的元素(elements),也按它们在元组中的顺序进行迭代。
- 字典(Dictionary):
- 迭代元素:默认情况下,字典的迭代是基于它的键(keys)进行的。但是,你也可以使用
.values()
和.items()
方法来分别迭代值(values)和键值对(key-value pairs)。
- 迭代元素:默认情况下,字典的迭代是基于它的键(keys)进行的。但是,你也可以使用
- 集合(Set):
- 迭代元素:集合中的元素(elements),迭代顺序通常是不确定的,因为它依赖于哈希表的实现。
- 字符串(String):
- 迭代元素:字符串中的字符(characters),按从左到右的顺序进行迭代。
- 范围(Range):
- 迭代元素:通过
range(start, stop[, step])
创建的整数序列中的数字。默认步长为1,从start
(包含)开始到stop
(不包含)结束。
- 迭代元素:通过
- 文件对象(在读取模式下):
- 迭代元素:文件中的行(lines),每次迭代返回一个文件的一行(包括末尾的换行符,如果有的话)。注意,当文件迭代完成后,迭代器会耗尽,再次迭代同一个文件对象将不会返回任何内容,除非文件指针被重置(例如,使用
file.seek(0)
)。
- 迭代元素:文件中的行(lines),每次迭代返回一个文件的一行(包括末尾的换行符,如果有的话)。注意,当文件迭代完成后,迭代器会耗尽,再次迭代同一个文件对象将不会返回任何内容,除非文件指针被重置(例如,使用
当我们想要根据一个范围来重复执行某些操作时,Python提供了一个内置函数range()
,它与for
循环配合使用非常方便。
range()
函数
range()
函数生成一个整数序列,这个序列通常用于for
循环中的迭代。range()
函数可以接受一到三个参数:
start
(可选): 序列的起始值,默认为0。stop
(必需): 序列的结束值,但不包括此值。step
(可选): 两个值之间的间隔,默认为1。
range()
函数返回的是一个迭代器,这意味着它返回的对象是一个支持迭代操作的对象,即它可以被遍历以获取其内部的元素。然而,在实际使用中,我们很少直接对range()
的结果进行迭代,而是将它直接用作for
循环的迭代对象。
for
循环与 range()
的结合使用
当for
循环与range()
结合使用时,可以非常方便地基于一个给定的范围进行迭代。例如,如果你想打印从0到4的数字,你可以这样做:
for i in range(5): # 注意这里用5,因为range不包括结束值
print(i)
# 输出:
# 0
# 1
# 2
# 3
# 4
注意事项
range()
生成的序列是从start
到stop-1
的整数序列,即stop
值是不包括在内的。- 如果
step
是正数,则序列是从start
到stop-1
的升序序列;如果step
是负数,则序列是从start
到stop+1
的降序序列(但请注意,这意味着stop
值必须大于start
,否则序列将是空的)。 - 虽然在很多情况下
range()
用于for
循环,但它也可以用在其他需要迭代整数的场合,比如列表推导式或生成器表达式中。
总的来说,for
循环与range()
的结合是Python中处理基于范围的迭代的一种非常强大且灵活的方式。
While循环
while
循环会在给定的条件为真时重复执行一段代码块。
基本语法
while 条件表达式:
# 循环体
示例
count = 0
while count < 5:
print(f"Count is {count}")
count += 1
循环控制语句
在循环中,你可能会需要提前结束循环或跳过循环的剩余部分。Python提供了break
和continue
语句来实现这些功能。
- break:立即退出循环,不再执行循环中剩余的语句。
- continue:跳过当前循环的剩余语句,并继续下一次循环。
示例
for i in range(1, 10):
if i == 5:
break # 当i等于5时,退出循环
print(i)
print("\nAfter break")
for i in range(1, 10):
if i == 5:
continue # 当i等于5时,跳过当前循环的剩余部分
print(i)
while-else结构
在Python中,while
循环可以搭配一个可选的 else
子句,这种结构称为 while-else
结构。while-else
结构允许你在 while
循环正常结束(即不是通过 break
语句退出的)后执行一些代码。如果 while
循环是通过 break
语句退出的,那么 else
子句中的代码将不会被执行。
基本语法
while 条件表达式:
# 循环体
# 如果需要,可以使用 break 语句退出循环
else:
# 当循环正常结束时执行的代码
示例 :通过 break 退出循环
count = 0
while True:
print(f"Count is {count}")
count += 1
if count >= 5:
break
else:
print("This will not be printed")
print("Exited the loop")
在这个例子中,虽然 while
循环的条件是 True
,但由于在循环体内使用了 break
语句,当 count
达到 5 时,循环会提前退出。因此,else
子句中的代码不会被执行,而 "Exited the loop" 会被打印出来。
使用场景
while-else
结构在需要知道循环是正常结束还是被 break
语句中断时非常有用。例如,在搜索列表中某个元素时,如果找到了元素,则使用 break
退出循环;如果遍历完整个列表都没有找到,则 else
子句中的代码会执行,可能表示需要执行一些默认操作或报告未找到元素。