Python循环语句:从基础到实战,掌握循环语句核心技能

一、循环基础:两种核心循环结构的使用场景与语法解析

在 Python 的编程世界里,循环语句是控制程序流程的关键工具,它允许我们重复执行一段代码,直到满足特定条件。

(一)for 循环:遍历序列的 “精准工具”⭐⭐⭐⭐

for循环主要用于遍历可迭代对象(如列表、字符串、字典等)或固定范围,语法结构为:

for 变量 in 可迭代对象:
    循环体代码

通过range()函数可生成整数序列,实现指定次数的循环。列如,打印九九乘法表时,外层循环控制乘数i(1 – 9),内层循环控制被乘数j(1 – i),通过双重循环嵌套高效生成所有乘法表达式,展现for循环在固定次数遍历中的优势。具体代码如下:

for i in range(1, 10):
    for j in range(1, i + 1):
        print(f"{j} * {i} = {i * j}	", end="")
    print()

在这段代码中,外层for循环从 1 到 9,每次迭代时,内层for循环从 1 到当前的i值。在内层循环中,我们打印出乘法表达式,并使用 进行制表符对齐,使输出呈现整齐的表格形式。每次内层循环结束后,通过print()换行,进入下一行的乘法表打印。

(二)while 循环:条件驱动的 “动态引擎”⭐⭐⭐⭐

while循环基于条件判断重复执行代码块,语法为:

while 条件表达式:
    循环体代码

它适用于未知循环次数的场景。例如,计算 1 到 100 的累加和时,初始化累加变量sum和计数变量i,通过i <= 100的条件持续累加,每次循环更新i,直至条件不满足时终止,体现其动态控制的灵活性。代码实现如下:

sum_num = 0
i = 1
while i <= 100:
    sum_num += i
    i += 1
print(f"1到100的累加和为: {sum_num}")

这里,第一初始化sum_num为 0,i为 1。在while循环中,只要i小于等于 100,就将i累加到sum_num中,然后i自增 1。当i大于 100 时,循环结束,输出累加和。

(三)for vs while:如何选择?

在实际编程中,选择for循环还是while循环,关键在于对循环需求的理解。我们可以通过以下对比表格来清晰地认识它们的区别:

使用场景

终止条件

典型用法

for循环

已知次数、遍历序列

自动遍历完所有元素

遍历列表、生成固定次数循环

while循环

未知次数、条件驱动

条件判断为 False

交互式输入、数值迭代计算

如果循环次数明确,或者需要遍历一个已知的序列(如列表中的元素、字符串中的字符等),for循环是首选,它的语法简洁,逻辑清晰,能让代码更易读和维护。而当循环次数不确定,需要根据某个条件的真假来决定是否继续循环时,while循环就发挥出它的优势,像处理用户输入验证、等待某个事件发生等场景。

二、循环控制:break 与 continue 的 “魔法指令”

在 Python 循环语句的使用过程中,break和continue语句作为循环控制的关键指令,赋予了程序更灵活的流程控制能力,能够协助我们在复杂的循环逻辑中,精准地控制代码执行流程。

(一)break:紧急终止循环⭐⭐⭐

break语句就像是循环中的 “紧急刹车”,一旦执行到break,无论循环条件是否依旧为真,都会立即终止当前所在的循环,跳出循环体,继续执行循环后面的代码。在一些需要提前结束循环的场景中,break语句发挥着重大作用。

列如在累加计算中,当累加和超过某个特定值时,我们可能不再需要继续累加,此时就可以使用break来提前终止循环,避免不必要的计算。示例代码如下:

sum_num = 0
for i in range(1, 1000):
    sum_num += i
    if sum_num > 1000:
        break
print(f"累加和达到或超过1000时,i的值为: {i},累加和为: {sum_num}")

在这段代码中,我们从 1 开始进行累加,每累加一次就检查当前的累加和sum_num是否超过了 1000。当sum_num超过 1000 时,if条件成立,执行break语句,立即终止循环。此时输出的结果会显示,在累加和达到或超过 1000 时,循环停止,对应的i值以及累加和sum_num的值。这种方式可以有效避免在已知条件满足后,继续进行无效的循环计算,提升程序的执行效率。

(二)continue:跳过当前迭代⭐⭐⭐

continue语句则像是循环中的 “跳跃指令”,它的作用是跳过本次循环中continue语句之后的所有代码,直接进入下一次循环迭代。在处理数据时,如果我们只想对满足某些条件的数据进行操作,而跳过其他不符合条件的数据,continue语句就派上用场了。

列如,在计算一系列数字中的奇数和时,我们可以通过continue语句跳过所有的偶数,只对奇数进行累加操作。示例代码如下:

sum_odd = 0
for num in range(1, 20):
    if num % 2 == 0:
        continue
    sum_odd += num
print(f"1到19中奇数的和为: {sum_odd}")

这里,for循环遍历从 1 到 19 的数字。在每次循环中,通过if语句判断当前数字num是否为偶数(即num % 2 == 0)。如果是偶数,就执行continue语句,跳过本次循环中后续的累加操作sum_odd += num,直接进入下一次循环。只有当num为奇数时,才会执行累加操作,最终计算出 1 到 19 中所有奇数的和。通过这种方式,continue语句协助我们精准地过滤掉不需要的数据,只对目标数据进行处理,使程序的逻辑更加清晰和高效。

(三)else 子句:循环的 “优雅收尾”⭐⭐⭐

在 Python 中,for循环和while循环都可以搭配else子句使用,这是 Python 循环语句的一个独特特性。else子句会在循环正常结束(即没有被break语句中途终止)时执行。在查找列表元素的场景中,我们可以利用else子句来处理未找到目标元素的情况。示例代码如下:

nums = [10, 20, 30, 40, 50]
target = 60
for num in nums:
    if num == target:
        print(f"找到了目标元素: {target}")
        break
else:
    print(f"未找到目标元素: {target}")

在这段代码中,我们在列表nums中查找目标元素target。如果在循环过程中找到了目标元素(即num == target条件成立),就打印找到的信息,并执行break语句终止循环,此时else子句不会被执行。但如果循环遍历完整个列表都没有找到目标元素,循环会正常结束,进而执行else子句中的代码,打印未找到目标元素的提示信息。通过这种方式,else子句为循环提供了一个优雅的收尾机制,确保程序在各种情况下都能有完整的流程处理,避免了使用额外的标记变量来判断循环是否找到目标元素,使代码结构更加简洁和易读 。

三、进阶技巧:让循环更高效的 “隐藏招式”

掌握了 Python 循环语句的基础用法和控制技巧后,想要写出更高效、更简洁的代码,还需要了解一些进阶技巧。这些技巧能协助你在处理复杂逻辑和大量数据时,让循环性能更上一层楼。

(一)嵌套循环:构建复杂逻辑⭐⭐⭐

嵌套循环是指在一个循环体内包含另一个循环。这种结构在处理需要多层迭代的场景时超级有用,例如生成二维数据结构、遍历矩阵等。以九九乘法表为例,我们可以使用双重循环嵌套来生成。外层循环控制行,内层循环控制列,通过乘法运算得到每个位置的数值。代码如下:

for i in range(1, 10):
    for j in range(1, i + 1):
        print(f"{j} * {i} = {i * j}	", end="")
    print()

在这个例子中,外层for循环从 1 到 9,每次迭代时,内层for循环从 1 到当前的i值。在内层循环中,我们计算并打印出乘法表达式, 用于对齐输出,使乘法表呈现整齐的格式。每次内层循环结束后,通过print()换行,进入下一行的计算和打印。

(二)range () 函数用法⭐⭐⭐⭐

for 临时变量 in 待处理数据集(可迭代对象): 
        循环满足条件时执行的代码

语法中的:待处理数据集,严格来说,称之为:可迭代类型

可迭代类型指,其内容可以一个个依次取出的一种类型,包括:字符串列表元组等

语法1:

range(num)

获取一个从0开始,到num结束的数字序列(不含num本身)

如range(5)取得的数据是:[0, 1, 2, 3, 4]

语法2:

range(num1,num2)

获得一个从num1开始,到num2结束的数字序列(不含num2本身)

如,range(5, 10)取得的数据是:[5, 6, 7, 8, 9]

语法3:

range(num1,num2,step)

获得一个从num1开始,到num2结束的数字序列(不含num2本身),数字之间的步长,以step为准(step默认为1)

如,range(5, 10, 2)取得的数据是:[5, 7, 9]

列如,要生成 1 到 9 的奇数序列,可以使用range(1, 10, 2)。结合for循环,我们可以快速遍历指定间隔的数值,实现更灵活的循环控制。示例代码如下:

for num in range(1, 10, 2):
    print(num)

这段代码会依次打印出 1、3、5、7、9,通过指定步长为 2,实现了对奇数的遍历。在实际应用中,这种方式可以用于筛选特定规律的数据,或者按照特定间隔进行操作。

(三)循环性能优化:避免常见陷阱

在编写循环代码时,一些常见的做法可能会影响性能。了解并避免这些陷阱,可以让你的循环代码运行得更高效。

1. 减少循环内计算:⭐⭐

尽量提前计算循环条件中的固定值,避免在每次循环时重复计算。

例如,在计算列表元素的和时,如果列表长度在循环过程中不会改变,就可以提前计算出列表长度,而不是每次在循环中调用len()函数。示例代码如下:

my_list = [1, 2, 3, 4, 5]
list_len = len(my_list)
sum_num = 0
for i in range(list_len):
    sum_num += my_list[i]

这里提前计算出my_list的长度list_len,在for循环中直接使用,避免了每次循环时调用len()函数带来的额外开销,提高了循环的执行效率。

2. 使用列表推导式:⭐⭐⭐⭐

对于简单的for循环操作,可以使用列表推导式来替代,它不仅代码更简洁,而且一般性能也更优。

列表推导式的语法为

[表达式 for 变量 in 可迭代对象 if 条件]

其中表达式是对每个元素进行的操作,变量是迭代变量,可迭代对象是数据来源,if 条件是可选的过滤条件。例如,将 0 到 9 的数字转换为平方数并过滤偶数,可以使用列表推导式实现:

squares = [x**2 for x in range(10) if x % 2 == 0]

Python循环语句:从基础到实战,掌握循环语句核心技能

相比传统的for循环实现方式,列表推导式将循环和条件判断合并在一行,代码更加紧凑,同时在执行效率上也有必定的提升,尤其是在处理大量数据时,这种优势更加明显。

3. 设置最大迭代次数:⭐⭐

在使用while循环时,为了防止因条件错误导致死循环,可以设置一个最大迭代次数。

例如,在进行数值迭代计算时,如果不确定循环何时结束,但又要避免程序陷入无限循环,可以添加一个计数器和最大迭代次数的限制。示例代码如下:

max_iterations = 1000
iteration_count = 0
while True:
    # 循环体代码
    iteration_count += 1
    if iteration_count >= max_iterations:
        break

在这段代码中,定义了max_iterations为最大迭代次数,iteration_count为当前迭代次数。每次循环时,iteration_count加 1,并检查是否达到最大迭代次数。如果达到,就使用break语句终止循环,从而避免了因循环条件错误而导致的死循环,增加了程序的稳定性和可靠性。

四、实战案例:猜数字游戏 —— 循环综合应用

(一)需求分析

目前,让我们通过一个有趣的实战案例 —— 猜数字游戏,来深入理解 Python 循环语句的综合应用。在这个游戏中,用户将与程序展开一场数字猜谜的较量。

用户第一输入数字范围,程序会在这个范围内随机生成一个数字。随后,用户不断猜测这个数字,每次猜测后,程序会给出相应的提示,告知用户猜测的数字是 “太小” 还是 “太大”。用户根据提示继续猜测,直到猜中正确的数字。同时,程序会记录用户猜测的次数,当用户最终猜中时,显示出总共猜测的次数。这个游戏融合了随机数生成、用户输入处理、条件判断以及循环控制等多个编程要点,是检验我们对 Python 循环语句掌握程度的绝佳实践。

(二)代码实现

下面是使用 Python 实现猜数字游戏的代码:

import random
low = int(input("请输入数字范围下限: "))
    high = int(input("请输入数字范围上限: "))
    target_number = random.randint(low, high)
    attempts = 0
    while True:
        try:
            guess = int(input(f"请输入你猜的数字(范围 {low}{high}): "))
            attempts += 1
            if guess < target_number:
                print("Too small!")
            elif guess > target_number:
                print("Too large!")
            else:
                print(f"Congratulations! You guessed the number {target_number} in {attempts} attempts.")
                break
        except ValueError:
            print("Please enter a valid number.")

在这段代码中,我们第一使用input()函数获取用户输入的数字范围下限和上限,并将其转换为整数类型。然后,通过random.randint()函数在指定范围内生成一个随机整数,作为用户需要猜测的目标数字。接下来,使用while True构建一个无限循环,确保用户可以不断猜测,直到猜中为止。在循环内部,使用try – except块来捕获用户输入可能出现的异常,防止因输入非数字内容而导致程序崩溃。每次获取用户输入的猜测数字后,将猜测次数attempts加 1,并通过if – elif – else条件判断结构来比较猜测数字与目标数字的大小关系:如果猜测数字小于目标数字,输出 “Too small!” 提示用户;如果猜测数字大于目标数字,输出 “Too large!” 提示用户;当猜测数字与目标数字相等时,输出祝贺信息,显示猜中的数字以及总共猜测的次数,并使用break语句终止循环,结束游戏。

这样,通过充分结合while循环的条件判断、break语句的终止逻辑以及与用户的交互,我们成功实现了一个完整的猜数字游戏,让用户在趣味互动中感受 Python 循环语句的强劲功能 。

五、常见问题与避坑指南

(一)循环变量作用域⭐⭐

在 Python 中,循环变量的作用域有点特殊,它在循环结束后依旧可见。这就可能导致一些意想不到的问题,特别是当内层循环变量与外层变量同名时。列如,在下面的代码中:

num = 100
for num in [1, 2, 3]:
    print(num)
print(f"循环结束后,num的值为: {num}")

这里外层定义了变量num,值为 100,而在for循环中又使用了同名的num作为循环变量。循环结束后,num的值变成了 3,这可能会破坏外层num原本的逻辑。为了避免这种情况,在命名循环变量时,要确保它不会与外层已有的重大变量冲突。

(二)else 子句执行条件⭐⭐⭐⭐

Python 循环中的else子句执行条件容易被误解。只有当循环正常结束(即没有被break终止)时,else子句才会执行。如果循环是通过break语句退出的,那么else代码块会被跳过。列如在这个例子中:

nums = [10, 20, 30]
for num in nums:
    if num == 20:
        break
else:
    print("没有执行break,循环正常结束")

由于在循环中找到了值为 20 的元素并执行了break,所以else子句中的内容不会被打印。在编写代码时,必定要确保条件判断和break语句的逻辑与else子句的执行条件一致,否则容易出现逻辑错误。

(三)缩进错误⭐⭐⭐⭐

Python 是一门对缩进超级敏感的语言,它依赖缩进区分不同的代码块。在循环语句中,循环体必须严格保持一致的缩进,一般提议使用 4 个空格。如果缩进不正确,就会引发语法错误。例如:

for i in range(5):
print(i)  # 这里没有缩进,会报错

运行这段代码时,Python 会抛出IndentationError,提示缩进错误。因此,在编写循环代码时,务必仔细检查缩进,保持代码结构的清晰和规范。使用支持自动缩进的编辑器(如 PyCharm、VS Code 等)可以有效减少这类错误的发生。

六、总结:循环语句的 “万能公式”

掌握 for 循环的 “遍历思维” 与 while 循环的 “条件思维”,搭配 break/continue 的流程控制,辅以 else 子句的优雅收尾,即可应对 90% 以上的循环场景。从简单累加到时复杂游戏逻辑,循环语句始终是代码重复执行的核心工具。

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 共2条

请登录后发表评论