在 Python 中,循环结构是实现重复任务的核心机制。本文将详细介绍循环控制的关键知识点,包括控制循环的关键字、循环结构中的 else 分支、for 循环与 range 对象,以及循环的实际应用案例。

一、控制循环的关键字

在循环中,break 和 continue 是两个常用的控制关键字,用于改变循环的执行流程。

1. break 关键字

  • 作用:强制结束当前循环,直接跳出循环体,不再执行后续循环任务。
  • 示例

    for i in range(5):
        if i == 3:
            break  # 当i=3时,强制结束循环
        print(i)
    # 输出:0 1 2
    

2. continue 关键字

  • 作用:结束本次循环,跳过当前循环中剩余的代码,直接进入下一次循环。
  • 示例

    for i in range(5):
        if i == 3:
            continue  # 当i=3时,跳过本次循环剩余内容
        print(i)
    # 输出:0 1 2 4
    

二、循环结构中的 else 分支

Python 的循环(while 和 for)支持与 else 搭配使用,其逻辑与条件判断中的 else 不同。

1. 语法结构

while 条件:
    循环体
else:
    else分支代码

# 或
for 变量 in 可迭代对象:
    循环体
else:
    else分支代码

2. 核心特点

  • 执行条件else 分支仅在循环条件正常不成立时执行(即循环自然结束,而非被 break 强制终止)。
  • 与 break 的关系else 和 break 是互斥的:
    • 若循环中执行了 break,则 else 分支一定不执行;
    • 若 else 分支执行了,则循环中一定没有执行 break

3. 应用案例:判断素数(质数)

素数是指只能被 1 和自身整除的大于 1 的整数(最小素数是 2)。利用 while + else 可简洁实现判断:

num = int(input('输入一个数字:'))
if num < 2:
    print('不是素数')
else:
    i = 2
    while i <= num **0.5:  # 优化:只需判断到平方根
        if num % i == 0:
            print('不是素数')
            break
        i += 1
    else:
        print('是素数')

三、for 循环详解

for 循环更适合处理循环次数确定的场景,其核心是遍历可迭代对象。

1. 语法结构

for 变量 in 可迭代对象:
    循环体
else:
    else分支代码  # 可选,同while的else逻辑

-** 变量 :存储可迭代对象中每次取出的数据;
-
 可迭代对象 **:指可逐个获取元素的对象,如字符串、列表、元组、集合、字典、range 对象等。

2. range 对象

range 用于生成一个数字序列,是 for 循环中控制次数的常用工具,有三种语法形式:

语法格式 说明 示例 生成的序列
range(stop) 生成从 0 到 stop-1 的整数 range(5) 0, 1, 2, 3, 4
range(start, stop) 生成从 start 到 stop-1 的整数(要求 start < stop) range(2, 6) 2, 3, 4, 5
range(start, stop, step) 生成从 start 到 stop-1、步长为 step 的整数(step 为正整数时 start <stop;为负整数时 start> stop) range(1, 10, 2)
range(10, 1, -3)
1, 3, 5, 7, 9
10, 7, 4

3. for 循环的应用场景

(1)遍历序列

# 遍历字符串
for char in "Python":
    print(char, end=" ")  # 输出:P y t h o n

# 遍历列表
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
    print(fruit)
(2)控制循环次数

# 计算 1~100 的和
total = 0
for i in range(1, 101):
    total += i
print(total)  # 输出:5050
(3)嵌套循环:打印九九乘法表

外层循环控制行数,内层循环控制列数:

for i in range(1, 10):  # 外层:9行
    for j in range(1, i + 1):  # 内层:第i行有i列
        print(f"{i}*{j}={i*j}", end="\t")
    print()  # 换行

四、循环的嵌套应用

多层循环(如双层循环)常用于处理二维结构(如行列图形、矩阵等)。核心原则:

  • 外层循环:控制行数,负责换行;
  • 内层循环:控制列数,负责输出每行的内容。

示例:打印俄罗斯方块图形

# 用十六进制表示图形(0x0464 对应二进制 0000 0100 0110 0100)
shape = 0x0464
n = 15  # 从最高位开始判断(共16位,索引0~15)

# 外层循环:输出4行
for _ in range(4):
    # 内层循环:输出4列
    for _ in range(4):
        # 判断当前位是否为1,为1则打印*
        if (shape >> n) & 1:
            print('*', end='\t')
        else:
            print('', end='\t')
        n -= 1
    print()  # 换行

总结

  • break 和 continue 是控制循环流程的核心关键字,分别用于终止循环和跳过本次循环;
  • 循环中的 else 分支仅在循环自然结束时执行,与 break 互斥;
  • for 循环适合遍历可迭代对象,range 是生成数字序列的高效工具;
  • 嵌套循环可处理二维结构,外层控行、内层控列是常见模式。

掌握这些知识点,能帮助你更灵活地处理 Python 中的重复任务,提升代码效率与可读性。

一、数字累加与自复制计算

# 从键盘接收一个数,生成形如 num + numnum + numnumnum + ... 的累加和
num = int(input('请输入一个数字:'))
num_ = 0  # 用于生成每一项,如 num, numnum, numnumnum...
count = 0  # 累加和
i = 0
while i < 5:
    num_ = num_ * 10 + num  # 生成下一项
    count += num_
    i += 1
print(count)

二、寻找完全数

# 寻找10000以内的所有完全数(真因数之和等于自身的数)
i = 10000  # 从10000开始倒序查找
while i >= 1:
    a = 1
    sum_ = 0
    while a <= (i ** 0.5):  # 优化:只需检查到平方根
        if i % a == 0:
            sum_ += a
            # 避免重复添加平方根对应的因数
            if a != i // a and a != 1:
                sum_ += i // a
        a += 1
    if sum_ == i:
        print(i)
    i -= 1

三、计算阶乘

# 计算输入数字的阶乘(n! = 1×2×3×...×n)
num = int(input("请输入一个数字:"))
result = 1
for i in range(num, 0, -1):  # 从n倒序到1
    result *= i
print(f"{num}的阶乘是:{result}")

四、遍历中文字符集

# 遍历Unicode中的汉字范围(0x4e00~0x9fa5)并统计数量
count = 0
chinese_chars = ''
for i in range(0x4e00, 0x9fa5 + 1):
    chinese_chars += chr(i)
    count += 1
print(f"共有{count}个中文字符")
# 注意:完整输出会很长,实际使用时建议分批次处理

五、打印三角形图案

# 打印倒三角形(上宽下窄)
for i in range(1, 6):
    for j in range(6 - i, 0, -1):
        print('*', end='')
    print()  # 换行

六、逆序打印乘法表

# 逆序打印9×9乘法表(从9×9到1×1)
for i in range(9, 0, -1):
    for j in range(1, i + 1):
        print(f"{i}*{j}={i*j}", end='\t')
    print()

七、猴子吃桃问题

# 猴子吃桃问题:每天吃掉一半加1个,第10天只剩1个,求最初数量
num = 1  # 第10天剩余1个
for day in range(9, 0, -1):  # 从第9天倒推到第1天
    num = (num + 1) * 2  # 前一天的桃子数是当天的(数量+1)*2
print(f"最初有{num}个桃子")

八、阶乘和计算

# 计算1! + 2! + 3! + 4! + 5!
sum_ = 0
for i in range(1, 6):
    factorial = 1
    for j in range(1, i + 1):  # 计算i的阶乘
        factorial *= j
    sum_ += factorial
print(f"1!+2!+3!+4!+5! = {sum_}")

九、十进制转十六进制

# 将十进制数转换为十六进制字符串(手动实现,不使用内置函数)
num = int(input('请输入一个数字:'))
hex_chars = "0123456789ABCDEF"
result = ''
if num == 0:
    print("0")
else:
    while num > 0:
        remainder = num % 16
        result = hex_chars[remainder] + result
        num = num // 16
    print(f"十六进制表示:{result}")

十、最大公约数与最小公倍数

# 计算两个正整数的最大公约数(GCD)和最小公倍数(LCM)
m, n = int(input('请输入第一个正整数:')), int(input('请输入第二个正整数:'))
a, b = m, n
# 使用辗转相除法求GCD
while b != 0:
    c = a % b
    a, b = b, c
gcd = a
lcm = m * n // gcd  # LCM = (m*n)/GCD
print(f"最大公约数为{gcd}")
print(f"最小公倍数为{lcm}")

十一、位运算绘制图形

# 使用位运算绘制4x4图形(根据输入数字的二进制位)
n = 15  # 从最高位开始检查
num = int(input('请输入一个数字:'))
for _ in range(4):  # 4行
    for _ in range(4):  # 4列
        if (num >> n) & 1:  # 检查第n位是否为1
            print('*', end='\t')
        else:
            print(' ', end='\t')
        n -= 1
    print()  # 换行

十二、筛选数字

# 找出1~10000中能被3整除或包含数字3的数
for i in range(1, 10001):
    if i % 3 == 0 or '3' in str(i):
        print(i)

十三、账号密码验证

# 模拟登录验证(最多3次尝试)
valid_username = 'admin'
valid_password = 'admin123'
for attempt in range(1, 4):
    username = input('输入账号:')
    password = input('输入密码:')
    if username == valid_username and password == valid_password:
        print('登陆成功')
        break
    else:
        print(f'登录失败,剩余尝试次数:{3 - attempt}次')
else:  # 三次尝试都失败
    print('登录失败,账号已锁定')

十四、数字组合与判断

# 找出1~1000中各位数字之和为10的数
for i in range(1, 1001):
    sum_digits = 0
    temp = i
    while temp > 0:
        sum_digits += temp % 10
        temp //= 10
    if sum_digits == 10:
        print(i)

十五、绘制特定图案

# 绘制特定的5行图形(类似沙漏)
for i in range(1, 6):
    match i:
        case 1 | 5:
            print('*' * 5)
        case 2 | 4:
            print(' ' + '*' * 3)
        case 3:
            print('  ' + '*')

十六、寻找回文数

# 找出10000~99999中的回文数(例如12321,个位与万位相同,十位与千位相同)
for i in range(10000, 100000):
    digit_list = [int(d) for d in str(i)]
    if digit_list[0] == digit_list[4] and digit_list[1] == digit_list[3]:
        print(i)

十七、斐波那契数列变形

# 计算数列:a₁=1, a₂=1, aₙ=aₙ₋₁+aₙ₋₂(n≥3)的第20项
a, b, c = 1, 0, 0  # 初始值:a₁=1
for i in range(1, 21):
    if i >= 2:
        c = b  # 保存前一项的值
        b = a  # 更新前一项为当前项
        a = a + c  # 计算当前项
print(f"数列第20项为:{a}")

十八、公倍数筛选与格式化输出

# 找出1~999中同时被3、5、7整除的数,并每行输出6个
count = 0
for i in range(1, 1000):
    if i % 3 == 0 and i % 5 == 0 and i % 7 == 0:
        print(i, end='\t')
        count += 1
        if count % 6 == 0:
            print()  # 每6个数换行

十九、数学问题求解

# 求解满足条件的最小正整数:加100后是完全平方数,再加168仍是完全平方数
i = 1
while True:
    if (int((i + 100) ** 0.5) ** 2 == i + 100 and
        int((i + 268) ** 0.5) ** 2 == i + 268):
        print(f"满足条件的最小数是:{i}")
        break
    i += 1

二十、数字组合排列

# 输入三个数字,生成所有可能的三位数排列(不重复使用数字)
a = int(input('请输入第一个数字:'))
b = int(input('请输入第二个数字:'))
c = int(input('请输入第三个数字:'))
digits = [a, b, c]
for i in digits:
    for j in digits:
        for k in digits:
            if i != j and i != k and j != k:  # 确保三个数字不同
                print(f"{i}{j}{k}")

总结

这些练习题涵盖了 Python 循环结构、条件判断、位运算、数学计算等基础知识点。通过实践,可以加深对以下概念的理解:

  1. 循环控制for 和 while 的使用场景,break 和 continue 的作用;
  2. 数学运算:阶乘、约数、完全平方数等计算方法;
  3. 字符串处理:数字与字符串的转换,字符编码;
  4. 位运算:通过二进制位操作实现图形绘制;
  5. 算法思想:递归、倒推、筛选等基础算法思路。

掌握这些基础操作后,可以进一步学习函数封装、模块化编程和更复杂的算法设计。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐