Python条件分支与循环
大家好,当涉及到编写高效和灵活的程序时,条件分支和循环是 Python 中至关重要的概念。它们允许我们根据不同的条件执行不同的代码块,或者重复执行一组语句。条件分支和循环是测试开发工程师在日常工作中经常使用的工具,无论是编写自动化测试脚本、处理测试数据还是构建测试框架,都离不开这些关键概念。
在本文中,我们将探索 Python 中条件分支和循环的基本知识和用法。我们将了解条件语句如何根据条件的真假来选择性地执行代码。我们还将深入研究不同类型的循环结构,包括 for
循环和 while
循环,以及它们的灵活性和适用场景。
一、条件分支
Python 的条件分支是一种编程结构,用于根据给定的条件选择性地执行不同的代码块。条件分支语句允许程序根据条件的真假来决定执行哪些代码。
Python 中的条件分支主要使用 if
、elif
和 else
语句来实现。条件分支允许根据给定的条件选择性地执行不同的代码块。下面我将详细介绍 Python 的条件分支语句。
1、if语句
if
语句用于执行一个代码块,当给定条件为真时执行。它的基本语法如下:
if 条件:# 执行的代码块
如果条件为真,则执行代码块;否则,跳过该代码块。
以下是一个使用 if
语句的示例:
x = 10
if x > 0:print("x 是正数")
在这个例子中,如果 x
的值大于 0,则会执行 print("x 是正数")
这行代码。
2、if-else
语句
if-else
语句用于根据条件的真假执行不同的代码块。它的基本语法如下:
if 条件:# 条件为真时执行的代码块
else:# 条件为假时执行的代码块
如果条件为真,则执行第一个代码块;否则,执行 else
后面的代码块。
以下是一个使用 if-else
语句的示例:
x = 10
if x > 0:print("x 是正数")
else:print("x 是非正数")
在这个例子中,如果 x
的值大于 0,则会执行 print("x 是正数")
这行代码;否则,执行 print("x 是非正数")
。
3、if-elif-else
语句
if-elif-else
语句用于在多个条件之间进行选择。它的基本语法如下:
if 条件1:# 条件1为真时执行的代码块
elif 条件2:# 条件2为真时执行的代码块
elif 条件3:# 条件3为真时执行的代码块
...
else:# 所有条件均为假时执行的代码块
根据条件的真假,依次检查每个条件,并执行第一个满足条件的代码块。如果所有条件均为假,则执行 else
后面的代码块。
以下是一个使用 if-elif-else
语句的示例:
x = 10
if x > 0:print("x 是正数")
elif x < 0:print("x 是负数")
else:print("x 是零")
在这个例子中,根据 x
的值,将会执行相应的代码块。
二、循环
Python 中的循环是一种重复执行特定代码块的控制结构。循环使得我们能够有效地处理重复性任务,遍历数据集合或根据条件执行特定操作。
Python 提供了两种主要类型的循环:while
循环和 for
循环。
1、for循环
在 Python 中,for
循环是一种用于遍历序列(如列表、字符串、元组等)或其他可迭代对象的循环结构。它允许我们逐个访问序列中的元素,并针对每个元素执行特定的代码块。下面我将详细介绍 Python 中的 for
循环。
for
循环的基本语法如下:
for 变量 in 序列:# 执行的代码块
在每次迭代中,变量会被赋值为序列中的下一个元素,然后执行代码块,直到遍历完所有元素为止。
以下是一个使用 for
循环的示例,遍历并打印列表中的元素:
fruits = ["apple", "banana", "orange"]
for fruit in fruits:print(fruit)
在这个例子中,for
循环遍历了列表 fruits
中的每个元素。在每次迭代中,当前元素会被赋值给变量 fruit
,然后执行代码块,打印出水果的名称。
除了列表,for
循环还可以遍历其他类型的序列,如字符串、元组等。例如:
string = "Hello"
for char in string:print(char)
在这个例子中,for
循环遍历了字符串 "Hello" 中的每个字符,并打印出字符。
此外,for
循环还可以与内置函数 range()
结合使用,用于生成一系列数字。例如:
for i in range(5):print(i)
在这个例子中,range(5)
生成了一个从 0 到 4 的数字序列。for
循环遍历该序列中的每个数字,并打印出数字。
在 for
循环中,我们还可以使用 break
语句来提前结束循环,以及 continue
语句来跳过当前迭代,继续下一次迭代。这些控制流程语句可以帮助我们对循环进行更精确的控制。
2、break
与continue
break
语句
break
语句用于立即终止当前所在的循环,不再执行循环中剩余的代码,并跳出循环体,继续执行循环后面的代码。它常用于在满足某个条件时提前结束循环。以下是 break
语句的使用示例:
for i in range(5):if i == 3:breakprint(i)
在这个例子中,for
循环遍历了数字序列 range(5)
中的每个数字。当 i
的值等于 3 时,执行 break
语句,终止循环。因此,只会打印出数字 0、1、2。
continue
语句
continue
语句用于跳过当前迭代中剩余的代码,直接进入下一次迭代。在遇到 continue
语句时,循环会立即跳到下一次迭代,而不再执行本次迭代剩余的代码。以下是 continue
语句的使用示例:
for i in range(5):if i == 2:continueprint(i)
在这个例子中,for
循环遍历了数字序列 range(5)
中的每个数字。当 i
的值等于 2 时,执行 continue
语句,跳过本次迭代中的剩余代码。因此,不会打印出数字 2,而是继续执行下一次迭代,打印出其他数字。
break
和 continue
语句通常与条件判断结合使用,以根据特定的条件来决定是否终止循环或跳过当前迭代。它们为我们提供了更灵活的控制循环流程的方式,使我们能够根据需要对循环进行精确的控制。
需要注意的是,break
和 continue
语句在嵌套循环中的行为可能会受到影响。break
语句会结束当前所在的最内层循环,并开始执行下一条语句。而 continue
语句会跳过当前所在的最内层循环的剩余代码,继续下一次最内层循环的迭代。
总结来说,break
语句用于提前结束循环,而 continue
语句用于跳过当前迭代,继续下一次迭代。这两个语句为我们提供了更多的控制循环执行流程的能力,使我们能够根据具体需求对循环进行精确的控制。
3、while循环
在 Python 中,while
循环是一种根据条件判断来重复执行代码块的循环结构。只要给定的条件为真(True
),循环就会一直执行,直到条件变为假(False
)。下面我将详细介绍 Python 中的 while
循环。
while
循环的基本语法如下:
while 条件:# 执行的代码块
在每次迭代中,首先会对条件进行判断。如果条件为真,则执行代码块;然后再次对条件进行判断,以此类推,直到条件为假,循环结束。
以下是一个使用 while
循环的示例,打印数字 0 到 4:
count = 0
while count < 5:print(count)count += 1
在这个例子中,count
的初始值为 0。循环首先检查条件 count < 5
,由于条件为真,执行代码块,打印出 count
的值。然后 count
的值递增,再次进行条件检查,直到 count
的值达到 5 时,循环结束。
需要注意的是,如果条件一开始就为假,那么循环内的代码块将不会执行,循环直接跳过。
在 while
循环中,我们可以使用 break
语句来提前结束循环,以及 continue
语句来跳过当前迭代,继续下一次迭代,与 for
循环中的用法相似。
以下是一个使用 while
循环和 break
语句的示例,寻找列表中的特定元素:
fruits = ["apple", "banana", "orange", "pear"]
index = 0
while index < len(fruits):if fruits[index] == "orange":print("找到了橙子!")breakindex += 1
else:print("未找到橙子!")
在这个例子中,循环遍历列表 fruits
中的元素,当找到值为 "orange" 的元素时,执行 break
语句,提前结束循环。如果循环正常结束而没有执行 break
,则执行 else
语句块,打印出 "未找到橙子!"。
当使用 while
循环结合 continue
语句时,可以通过跳过某些迭代来控制循环的执行流程。以下是一个使用 while
循环和 continue
语句的示例,计算列表中的奇数之和:
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
sum_odd = 0
index = 0while index < len(numbers):if numbers[index] % 2 == 0:index += 1continuesum_odd += numbers[index]index += 1print("奇数之和:", sum_odd)
在这个例子中,while
循环遍历列表 numbers
中的元素。如果当前元素是偶数,即 numbers[index] % 2 == 0
条件为真,那么执行 continue
语句,跳过当前迭代,继续下一次迭代。这样可以确保只有奇数被累加到 sum_odd
变量中。在每次迭代中,如果当前元素是奇数,那么将其加到 sum_odd
中。然后 index
递增,继续下一次迭代。最终,打印出累加得到的奇数之和。
在这个例子中,continue
语句帮助我们跳过偶数,只对奇数执行特定的操作。通过使用 continue
,我们可以更精确地控制循环的执行流程,以满足特定的需求。
while
循环也需要谨慎使用,因为如果条件一直为真,循环可能会陷入无限循环的状态,导致程序无法继续执行。因此,我们需要确保条件在循环执行过程中最终会变为假,或者使用 break
语句来提前结束循环。
总结来说,Python 的 while
循环允许我们根据条件判断重复执行代码块,直到条件为假。它是处理重复性任务和根据条件执行特定操作的重要工具之一。同时,我们可以使用 break
和 continue
语句来对循环进行更精确的控制。
4、循环嵌套
while与for嵌套
当需要在一个循环内嵌套另一个循环时,我们可以将 for
循环和 while
循环结合使用。
以下是一个同时包含 for
循环和 while
循环的例子,用于输出九九乘法表:
for i in range(1, 10):j = 1while j <= i:print(f"{j} × {i} = {j * i}", end="\t")j += 1print()
在这个例子中,外层的 for
循环用于控制被乘数 i
,取值范围是 1 到 9。对于每个 i
的值,我们使用内层的 while
循环来生成乘法表的一行。内层的 while
循环中,初始时将乘数 j
设为 1。在每次循环中,我们打印出当前的乘法表项,并将 j
递增,直到 j
的值大于等于 i
,然后换行。
通过将 for
循环和 while
循环结合使用,我们可以生成完整的九九乘法表。这个例子展示了如何在一个循环内嵌套另一个循环,并且同时使用了 for
循环和 while
循环,以实现特定的功能。这种循环嵌套的结构可以在需要处理多维数据或复杂的迭代逻辑时非常有用。
while与while嵌套
以下是一个使用 while
循环嵌套 while
循环的例子,用于打印一个矩形图案:
rows = 5
columns = 8
i = 0while i < rows:j = 0while j < columns:print("*", end=" ")j += 1print()i += 1
在这个例子中,外层的 while
循环用于控制打印的行数,变量 i
从 0 开始,每次递增 1,直到达到指定的行数 rows
。在内层的 while
循环中,我们打印星号 *
字符,控制打印的列数。变量 j
从 0 开始,每次递增 1,直到达到指定的列数 columns
。
运行此代码将输出如下的矩形图案:
for与for嵌套
以下是一个使用 for
循环嵌套 for
循环的例子,用于输出九九乘法表:
for i in range(1, 10):for j in range(1, 10):print(f"{j} × {i} = {j * i}", end="\t")print()
在这个例子中,外层的 for
循环用于控制被乘数 i
,取值范围是 1 到 9。对于每个 i
的值,内层的 for
循环用于控制乘数 j
,也取值范围是 1 到 9。在内层的 for
循环中,我们打印出当前的乘法表项,并使用制表符 \t
分隔每个项。
运行此代码将输出如下的九九乘法表:
5、使用循环的注意事项
在使用 Python 循环时,有几个方面需要注意:
-
循环条件:确保循环条件正确,并且能够在循环执行过程中最终变为假。否则,循环可能会陷入无限循环的状态,导致程序无法继续执行。
-
循环变量的更新:在循环体内,确保更新循环变量的值,以便在每次迭代中逐步改变条件,使循环能够最终结束。
-
循环控制语句的正确使用:了解并正确使用循环控制语句,如
break
和continue
。break
用于提前结束循环,而continue
用于跳过当前迭代,继续下一次迭代。 -
避免无限循环:确保循环的终止条件被满足,避免无限循环。如果循环意外陷入无限循环,可以使用
Ctrl+C
组合键终止程序的执行。 -
循环效率:在迭代大量数据或执行复杂操作的情况下,要考虑循环的效率。避免在循环内部执行过多的重复计算或频繁的 I/O 操作,可以通过优化算法或缓存结果来提高循环效率。
-
循环嵌套:当在一个循环内嵌套另一个循环时,要确保内层循环的执行条件和控制正确,避免出现逻辑错误或死循环。
-
循环的可读性和可维护性:编写清晰、易读的循环代码,使用有意义的变量名和注释来解释循环的目的和逻辑。避免过长的循环体和复杂的嵌套结构,可以考虑将复杂的逻辑拆分成更小的函数或模块。
-
选择合适的循环类型:Python 提供了多种循环类型,如
for
循环、while
循环和列表推导式等。根据具体的需求和情况选择合适的循环类型,以及使用适当的迭代工具和技巧,可以简化代码并提高效率。
相关文章:

Python条件分支与循环
大家好,当涉及到编写高效和灵活的程序时,条件分支和循环是 Python 中至关重要的概念。它们允许我们根据不同的条件执行不同的代码块,或者重复执行一组语句。条件分支和循环是测试开发工程师在日常工作中经常使用的工具,无论是编写…...

AI手语研究数据集;视频转视频翻译和风格化功能如黏土动画;AI检测猫咪行为;开放源码的AI驱动搜索引擎Perplexica
✨ 1: Prompt2Sign 多语言手语数据集,便捷高效用于手语研究。 Prompt2Sign 是一个全面的多语言手语数据集,旨在通过工具自动获取和处理网络上的手语视频。该数据集具有高效、轻量的特点,旨在减少先前手语数据集的不足之处。该数据集目前包含…...

四川景源畅信:新人做抖店的成本很高吗?
随着社交媒体的兴起,抖音成为了一个新兴的电商平台——抖店。不少创业者和商家看中了其庞大的用户基础,想要通过开设抖店来拓展销路。然而,对于刚入行的新手来说,成本问题总是让人犹豫不决。究竟新人做抖店的成本高不高?本文将围…...

ChatGPT原创指令大全(持续更新)
随着ChatGPT在互联网上的使用越来越多,但很多人在使用ChatGPT的过程中会觉得得到的答案并不是很精准。究其原因其实是你给它的命令不够准确、不够到位。实际现在网上已经很多关于ChatGPT的网站,可以快速生成带有快捷键的ChatGPT指令。但是对于不熟悉Chat…...

Java实现对PDF、纵向、横向页面添加自定义水印功能
Java实现对PDF、纵向、横向页面添加自定义水印 效果图 -- 纵向 页面PDF使用到JAR Maven依赖版本效果图 -- 横向页面PDF 效果图 – 纵向 页面PDF 代码如下: 使用到JAR Maven依赖版本 <dependency><groupId>org.apache.pdfbox</groupId><artifa…...

设计模式15——享元模式
写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用,主要是下面的UML图可以起到大作用,在你学习过一遍以后可能会遗忘,忘记了不要紧,只要看一眼UML图就能想起来了。同时也请大家多多指教。 享元模式(Flyweigh…...

多模态中的模态有哪些
“多模态”这个名字中的“模态”(modality),指的是不同的数据类型或信息源。在多模态大模型中,常见的模态包括: 文本模态: 包括自然语言文本、语音识别文本等。 图像模态: 指图像数据ÿ…...
Java练习题(八)
36.关于抽象类叙述正确的是? (B ) A.抽象类不能实现接口 B.抽象类必须有“abstract class”修饰 C.抽象类必须包含抽象方法 D.抽象类也有类的特性,可以被实例化 37.以下说法错误的是(C) A.数组是一个对象 B.数组不是一种原…...

Linux文本文件管理003
★排序、去重、统计★ 1)排序 sort -n按照数值排序 -r降序排列 2)去重 uniq 过滤相邻、重复的行 -c 对重复行计数 3)统计 wc 统计文件中的字节数、单词数、行数 -l 显示行数 今天通过使用grep、awk、cut指令和上面几个选项提取文本文件…...
uniapp Androud 离线打包升级APK,覆盖安装不更新问题
Android 打包时在assets/data/dcloud_control.xml文件中,如果配置debug"true" syncDebug"true",则consle打印有效,不然没有打印数据 <hbuilder debug"true" syncDebug"true"> <apps> …...

【算法实战】每日一题:设计一个算法,用最少数量的矩形覆盖一系列宽度为d、高度为w的矩形,且使用矩形不能超出边界
题目 设计一个算法,用最少数量的矩形覆盖一系列宽度为d、高度为w的矩形建筑物侧墙,且矩形不能超出边界。 核心思路 考虑这种结构 前面递增后面一个与前面的某个高度一致,这时候考虑最下面的覆盖(即都是从最下面向上覆盖&#…...

外贸仓库管理软件:海外仓效率大幅度提升、避免劳动力积压
随着外贸业务的不断发展,如何高效管理外贸仓库,确保货物顺利流转,订单顺利处理,就变得非常重要。 现在通常的解决方案都是通过引入外贸仓库管理软件,也就是我们常说的海外仓WMS系统来解决。 今天我们就系统的探讨一下…...
6.8 LIBBPF API(七,bpf_core_read.h 函数,定义,枚举)
一,函数 void * bpf_rdonly_cast (const void *obj, __u32 btf_id) __ksym __weak 二,定义 __CORE_RELO(src, field, info) __builtin_preserve_field_info((src)->field,BPF_FIELD_##info) __CORE_BITFIELD_PROBE_READ(dst, src, fld) bpf_probe_read_kernel( \ (v…...

电脑卸载linux安装windows后每次开机都出现grub
原因分析 这是因为电脑硬盘中还存在linux系统的引导程序,并且启动顺序还在windows之前,有时候通过bios根本找不到它的存在,以至于每次windows开机出现grub之后都要输入exit退出linux的引导之后才能使得电脑进入windows,这个有时会…...

总结 HTTPS 的加密流程
一、前言 http是为了解决http存在的问题而在http基础上加入了SSL/TSL,在HTTP/2中TCP三次握手后会进入SSL/TSL握手,当SSL/TSL建立链接后,才会进行报文的传输。 二、HTTPS的混合加密 我们先来认识密钥: 密钥是用于加密和解密数据…...

Spring的FactoryBean多例问题
关于spring bean,我们了解的最多的还是单例,而多例bean,除了平时我们自己new的那些多实例外(但不属于IOC管理了),几乎很少能用到,而在spring 层面,FactoryBean刚好是多例的一个体现,…...

[nextjs]推荐几个很好看的模板网站
最近在做网站,折腾了 vue 框架,然后发现了 nextjs 框架,感觉这个做出来的网站配色很好看,然后又开始研究这个 网站配色好看是因为用的 tailwindcss,找网站过程中,发现了几个很好看的模板网站,在这里推荐下,或许你也能用得上 推荐第一个网站是: https://tailspark.co/ 有组件,也…...

《当微服务遇上Ribbon:一场负载均衡的华丽舞会》
在微服务的厨房里,如何确保每一道服务都恰到好处?揭秘Spring Cloud Ribbon如何像大厨一样精心调配资源,让负载均衡变得像烹饪艺术一样简单! 文章目录 Spring Cloud Ribbon 详解1. 引言微服务架构中的负载均衡需求Spring Cloud Rib…...

简单随机数据算法
文章目录 一,需求概述二,实现代码三、测试代码四、测试结果五、源码传送六、效果演示 一,需求概述 系统启动时,读取一组图片数据,通过接口返回给前台,要求: 图片随机相邻图片不重复 二&#…...
js画思维导图代码2
这段代码是一个使用Vue.js和D3.js构建的树形图组件。它是一个Vue组件,用于创建和显示一个交互式的树形结构图。下面是对这段代码的简要分析: 模板部分 (<template>): 定义了组件的HTML结构,包括一个隐藏的提示框(#tooltip)和一个用于显…...

Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...

深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...

04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...