写在前面
循环结构是一种允许程序反复执行某些代码块的控制结构。常见的循环结构包括:
- while 循环:当条件为 True 时,重复执行代码块。
- for 循环:遍历一个序列中的每个元素时,执行代码块。
while 循环
语法格式
while
是循环关键字,后面跟一个条件表达式。
<条件>
是一个布尔表达式,当其结果为 True
时执行循环体中的代码块。
语句块
是在条件成立时执行的代码。需要注意的是,语句块中的代码必须缩进(通常为 4 个空格)。
流程
- 首先判断
<条件>
是否为 True
。
- 如果条件为
True
,执行 语句块
。
- 然后再次判断
<条件>
,如此循环,直到条件为 False
。
- 当条件为
False
时,退出循环,执行循环后的代码。
简单示例
1
2
3
4
|
i = 1
while i <= 5:
print(f"第 {i} 次循环")
i += 1
|
- 初始化变量
i = 1
。
- 当
i <= 5
为 True
时,执行打印语句并递增 i
。
- 当
i
增加到 6
时,条件 i <= 5
为 False
,循环终止。
while循环的应用场景
- 条件驱动循环
- 根据特定条件执行操作,如用户输入数据直到符合要求。
- 示例:提示用户输入一个大于 10 的数字,如果不符合则继续提示。
1
2
3
4
|
number = int(input("请输入一个大于10的数字: "))
while number <= 10:
number = int(input("数字太小,请重新输入: "))
print("输入正确!")
|
- 处理用户输入
- 使用 while 循环控制菜单选项的展示,直到用户选择退出。
- 示例:简单的文本菜单系统
示例
1
2
3
4
5
6
7
8
9
|
while True:
print("1. 查看余额")
print("2. 存款")
print("3. 取款")
print("4. 退出")
choice = input("请选择操作: ")
if choice == '4':
break
# 其他操作逻辑
|
for循环
语法格式
1
2
|
for <变量> in <可迭代对象>:
语句块
|
for
是循环关键字。
<变量>
是每次循环时从 <可迭代对象>
中获取的元素。
in
关键字表示循环的范围或对象。
<可迭代对象>
可以是列表、元组、字符串或其他可迭代对象。
- 语句块是对每个元素执行的代码,通常缩进(4个空格)。
简单示例
1
2
3
|
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)
|
fruits
是一个列表,包含三个字符串元素。
- 每次迭代时,将列表中的一个元素赋值给
fruit
变量。
- 打印当前元素。
range() 函数与 for 循环
range() 函数说明
1
2
3
|
range(stop) # 生成从 0 到 stop-1 的整数序列
range(start, stop) # 生成从 start 到 stop-1 的整数序列
range(start, stop, step) # 生成从 start 到 stop-1,间隔为 step 的整数序列
|
示例:使用循环打印乘法口诀表
1
2
3
|
for i in range(1, n+1):
for j in range(i, 2*i+1):
print(f"{i*j}")
|
- 外层循环遍历
i
从 1 到 n
。
- 内层循环遍历
j
从 i
到 2*i + 1
,打印乘积。
嵌套 for 循环
定义
for 循环可以嵌套使用。
示例
1
2
3
|
for i in range(3):
for j in range(2):
print(f"i={i}, j={j}")
|
- 外层循环遍历
i
从 0 到 2。
- 内层循环遍历
j
从 0 到 1,打印每个组合。
for 循环的常见使用场景
- 遍历字符串:
1
2
3
|
s = "hello"
for c in s:
print(c)
|
- 遍历列表(集合、元组):
1
2
3
4
5
|
my_list = [10, 20, 30]
sum_ = 0
for num in my_list:
sum_ += num
print(sum_)
|
- 遍历字典:
1
2
3
4
5
6
7
|
students = {
"Name": "Alice",
"Age": 18,
"Score": 85
}
for key, value in students.items():
print(f"{key}: {value}")
|
- 与 range 组合使用:
1
2
3
4
|
for i in range(5):
print(i)
for j in range(i+1):
print(f"i={i}, j={j}")
|
循环的控制语句
break 语句
break
用于立即退出循环,无论循环条件是否为 True
。
示例
1
2
3
4
5
6
|
i = 1
while i <= 10:
if i == 5:
break # 当 `i` 等于 5 时,退出循环
print(i)
i += 1
|
1
2
3
4
|
for i in range(5):
if i > 2:
break
print(i)
|
- 在这个示例中,当
i
等于 5 时,循环会被提前终止。
continue 语句
continue
用于跳过当前循环中的剩余语句,并直接进入下一次循环的判断。
示例
1
2
3
4
5
6
|
i = 0
while i < 5:
i += 1
if i == 3:
continue # 跳过打印 `i` 为 3 的情况
print(i)
|
1
2
3
4
|
for i in range(3):
if i == 1:
continue
print(i)
|
- 当
i
等于 3 时,循环会跳到下一次循环的判断,避免执行后续代码。
else 子句
当循环正常结束时(没有被 break
终止),else
子句会执行。
1
2
3
4
5
6
|
i = 1
while i <= 5:
print(i)
i += 1
else:
print("循环结束")
|
1
2
3
4
|
for i in range(3):
print(i)
else:
print("循环结束")
|
无限循环和死循环
无限循环
如果循环的条件始终为 True
,则循环将永远不会结束,这被称为无限循环。
示例
1
2
|
while True:
print("这是一条无限循环语句")
|
- 这个循环会一直打印 “这是一条无限循环语句”,除非手动停止程序。
避免死循环
为了避免死循环,在编写
while
循环时,需要确保在循环体内有逻辑使得循环条件最终会变为 False
。
示例
1
2
3
4
|
i = 1
while i <= 5:
print(i)
# 忘记递增 `i`,会导致死循环
|
- 在这个示例中,如果忘记递增
i
,循环将永远不会结束。
解决方法:
在循环体内正确更新控制条件变量,如 i += 1
。
示例
1
2
3
4
5
6
|
i = 1
while i <= 5:
print(i)
i += 1
else:
print("循环正常结束")
|
- 当
i
增加到 6
时,条件为 False
,循环正常结束,执行 else
子句。
常见的陷阱和最佳实践
- 避免死循环:确保在循环体内有逻辑使得条件最终会变为 False。
- 控制语句的使用:合理使用 break 和 continue 可以使循环更灵活,但滥用可能使代码难以理解。
- 循环条件的检查:在编写 while 循环时,仔细检查循环条件,确保逻辑正确。
- 避免在循环中修改列表:可能导致不可预见结果。
- 合理使用控制语句:提高代码可读性和效率,但避免滥用。
- 使用 range() 和 enumerate() 简化代码:减少手动维护索引的需求。