在 Python 中,`while` 循环可以与 `else` 块配合使用。这种结构的语法如下:
```python
while condition:
# 循环体
else:
# else 块的内容
```
### **`while...else` 的工作原理**
1. **循环体**:如果 `condition` 为 `True`,则执行循环体。
2. **循环结束**:
- 如果循环正常结束(即 `condition` 变为 `False`),则执行 `else` 块。
- 如果循环被 `break` 中断,则 `else` 块不会执行。
### **示例代码**
以下是一个简单的例子,展示 `while...else` 的行为:
```python
# 示例 1:循环正常结束
count = 0
while count < 3:
print(f"Count: {count}")
count += 1
else:
print("Loop finished normally")
```
**输出:**
```
Count: 0
Count: 1
Count: 2
Loop finished normally
```
- **解释**:
- 循环正常结束,因为 `count` 达到了 3,`condition` 变为 `False`。
- 因此,`else` 块被执行。
---
```python
# 示例 2:循环被 break 中断
count = 0
while count < 3:
print(f"Count: {count}")
if count == 1:
break
count += 1
else:
print("Loop finished normally")
```
**输出:**
```
Count: 0
Count: 1
```
- **解释**:
- 循环被 `break` 中断,`else` 块不会执行。
---
### **使用场景**
`while...else` 结构通常用于以下场景:
1. **搜索或检查条件**:
- 如果循环中找到满足条件的项,则使用 `break` 退出循环,`else` 块不会执行。
- 如果循环正常结束(没有找到满足条件的项),则执行 `else` 块。
2. **资源清理或后续操作**:
- 如果循环正常结束,执行一些清理操作或后续逻辑。
### **示例:搜索元素**
以下是一个使用 `while...else` 进行搜索的示例:
```python
numbers = [1, 2, 3, 4, 5]
target = 3
index = 0
while index < len(numbers):
if numbers[index] == target:
print(f"Found {target} at index {index}")
break
index += 1
else:
print(f"{target} not found in the list")
```
**输出:**
```
Found 3 at index 2
```
如果目标值不在列表中,输出将是:
```
5 not found in the list
```
### **总结**
- `while...else` 结构允许在循环正常结束时执行 `else` 块。
- 如果循环被 `break` 中断,则 `else` 块不会执行。
- 这种结构常用于搜索或检查条件的场景,以及在循环正常结束时执行清理操作。