# 循环结构 ## 概述 当某段代码需要重复执行时,使用循环结构。Python 中有两种构造循环的方式:`for-in` 和 `while`。 ## for-in 循环 适用于**已知循环次数**的场景: ```python for i in range(3600): print('hello, world') time.sleep(1) ``` ### range() 用法 | 表达式 | 说明 | |--------|------| | `range(101)` | 0 到 100(不包含 101) | | `range(1, 101)` | 1 到 100 | | `range(1, 101, 2)` | 1 到 100 的奇数,步长为 2 | | `range(100, 0, -2)` | 100 到 1 的偶数,倒序 | ### 累加求和 ```python # 1到100整数求和 total = 0 for i in range(1, 101): total += i print(total) # 5050 # 1到100偶数求和(用步长) print(sum(range(2, 101, 2))) # 2550 ``` > **惯例**:循环变量如果不需要使用,命名为 `_`: ```python for _ in range(3600): print('hello, world') ``` ## while 循环 适用于**循环次数不确定**的场景: ```python total = 0 i = 1 while i <= 100: total += i i += 1 print(total) # 5050 ``` ## break 和 continue - `break`:跳出整个循环 - `continue`:跳过本次循环,进入下一轮 ```python # 找出第一个能整除x和y的数(即最大公约数) for i in range(x, 0, -1): if x % i == 0 and y % i == 0: print(f'最大公约数: {i}') break # 1到100偶数求和(用continue) total = 0 for i in range(1, 101): if i % 2 != 0: continue total += i ``` ## 嵌套循环 循环内部可以再放循环,用于二维问题: ```python # 打印九九乘法表 for i in range(1, 10): for j in range(1, i + 1): print(f'{i}×{j}={i*j}', end='\t') print() ``` ## 应用实例 ### 实例1:判断素数 ```python num = int(input('请输入正整数: ')) is_prime = True for i in range(2, int(num ** 0.5) + 1): if num % i == 0: is_prime = False break print(f'{num}是素数' if is_prime else f'{num}不是素数') ``` > **提示**:只需检查到 √n 即可,因子总是成对出现。 ### 实例2:最大公约数(欧几里得算法) ```python x = int(input('x = ')) y = int(input('y = ')) while y % x != 0: x, y = y % x, x print(f'最大公约数: {x}') ``` ### 实例3:猜数字游戏 ```python import random answer = random.randrange(1, 101) counter = 0 while True: counter += 1 num = int(input('请输入: ')) if num < answer: print('大一点') elif num > answer: print('小一点') else: print('猜对了!') break print(f'你一共猜了{counter}次') ``` ## 总结 - 循环次数确定用 `for-in`,不确定用 `while` - `break` 终止循环,`continue` 跳过本次循环 - 嵌套循环注意缩进和执行顺序 - 算法:穷举法(逐一尝试)、欧几里得算法(辗转相除)