当前位置: 首页 > news >正文

Python控制流完全指南

Python控制流完全指南:从if判断到循环,一篇就够了

今天我们来聊聊Python编程中最重要的基石之一——控制流。简单来说,控制流决定了你的程序在什么条件下执行什么代码,以及如何重复执行某段代码。掌握它,你就能写出逻辑清晰、功能强大的程序。

一、缩进:Python的“灵魂”与“骨架”

在正式开始之前,我们必须先聊聊Python最独特、也最重要的语法规则:缩进

在其他编程语言(如C、Java)中,代码块通常用花括号{}来界定。但在Python中,代码块是通过缩进来表示的。同一层级的代码必须拥有相同的缩进量(通常是4个空格或1个Tab)。

为什么缩进如此重要?

  1. 语法强制:缩进错误会导致程序直接报错IndentationError,无法运行。
  2. 代码可读性:强制缩进让代码结构一目了然,强迫开发者写出整洁、规范的代码。

示例:

# 正确的缩进age=18ifage>=18:print("你已经成年了。")# 这行缩进了4个空格,属于if代码块print("欢迎来到成人世界。")# 同样缩进,属于if代码块print("这句话无论age是多少都会执行。")# 没有缩进,与if同级# 错误的缩进# if age >= 18:# print("缩进错误!") # 这行没有缩进,会报错

核心规则

  • 使用4个空格作为标准缩进(PEP 8推荐)。
  • 不要混用Tab和空格,这会导致难以排查的错误。大多数现代IDE(如PyCharm、VS Code)会自动将Tab转换为空格。

二、if 判断语句:让程序拥有“大脑”

if语句是程序做决策的基础。它根据一个条件(布尔表达式)的真假,来决定是否执行特定的代码块。

1. 基本语法

if条件:条件为真时执行的代码块

示例:

score=85ifscore>=60:print("恭喜,考试及格了!")

2. if-else 结构

当条件为假时,执行另一段代码。

if条件:条件为真时执行的代码块else:条件为假时执行的代码块

示例:

temperature=30iftemperature>25:print("今天很热,开空调吧。")else:print("今天很凉爽,出去走走。")

3. if-elif-else 结构

当有多个条件需要依次判断时,使用elif(是else if的缩写)。

if条件1:条件1为真时执行elif条件2:条件1为假且条件2为真时执行elif条件3:条件12为假且条件3为真时执行...else:所有条件都为假时执行

示例:

score=88ifscore>=90:grade='A'elifscore>=80:grade='B'elifscore>=70:grade='C'elifscore>=60:grade='D'else:grade='F'print(f"你的成绩等级是:{grade}")# 输出:你的成绩等级是:B

注意if-elif-else从上到下依次判断的,一旦某个条件为真,执行完对应的代码块后,就会跳过整个if-elif-else结构。

三、三元表达式:简洁的条件赋值

三元表达式是if-else的一种简洁写法,常用于根据条件给变量赋值。

语法:

变量=1if条件else2

如果条件为真,变量被赋值为值1,否则为值2

示例:

# 传统写法age=20ifage>=18:status="成年人"else:status="未成年人"# 三元表达式写法status="成年人"ifage>=18else"未成年人"print(status)# 输出:成年人

适用场景:当if-else结构非常简单,且目的是为了赋值时,使用三元表达式可以让代码更简洁。但不要滥用,过于复杂的嵌套会降低可读性。

四、for 循环:遍历一切可迭代对象

for循环用于遍历一个可迭代对象(如列表、字符串、元组、字典、集合、range等)中的每一个元素。

1. 遍历列表

fruits=["苹果","香蕉","橘子"]forfruitinfruits:print(f"我喜欢吃{fruit}")# 输出:# 我喜欢吃苹果# 我喜欢吃香蕉# 我喜欢吃橘子

2. 遍历字符串

forcharin"Python":print(char)# 输出:P y t h o n (每个字母占一行)

3. 使用 range() 函数

range()可以生成一个整数序列,常用于指定循环次数。

# range(5) 生成 0, 1, 2, 3, 4foriinrange(5):print(f"这是第{i+1}次循环")# range(2, 6) 生成 2, 3, 4, 5foriinrange(2,6):print(i)# range(1, 10, 2) 生成 1, 3, 5, 7, 9 (步长为2)foriinrange(1,10,2):print(i)

4. 遍历字典

student={"name":"小明","age":18,"score":95}# 遍历键forkeyinstudent:print(key)# 输出:name age score# 遍历值forvalueinstudent.values():print(value)# 输出:小明 18 95# 同时遍历键和值forkey,valueinstudent.items():print(f"{key}:{value}")

五、while 循环:条件为真,循环不止

while循环会在条件为真时,重复执行代码块,直到条件变为假。

语法:

while条件:循环体代码块

示例:

count=0whilecount<5:print(f"当前计数:{count}")count+=1# 重要!必须更新条件,否则会变成无限循环print("循环结束")

注意while循环必须确保条件最终会变为False,否则程序会陷入无限循环。如果程序卡住了,可以按Ctrl+C强制终止。

六、循环控制:break 和 continue

在循环执行过程中,我们有时需要提前退出或跳过某次迭代,这时就需要breakcontinue

1. break:立即终止整个循环

break用于完全退出当前所在的循环体,不再执行循环中剩余的迭代。

示例:

# 查找列表中第一个大于10的数字numbers=[3,7,12,5,20]fornuminnumbers:ifnum>10:print(f"找到第一个大于10的数字:{num}")break# 找到后立即退出循环print(f"检查数字:{num},不符合条件")# 输出:# 检查数字:3,不符合条件# 检查数字:7,不符合条件# 找到第一个大于10的数字:12

2. continue:跳过本次循环,进入下一次

continue用于跳过当前这次迭代中continue之后的所有代码,直接进入下一次循环的判断。

示例:

# 打印1到10之间的所有奇数foriinrange(1,11):ifi%2==0:# 如果是偶数continue# 跳过本次循环,不执行下面的printprint(i)# 输出:1 3 5 7 9 (每个数字占一行)

总结区别

  • break终止整个循环。
  • continue跳过当前这一次,继续下一次。

七、综合示例:猜数字游戏

写一个简单的猜数字游戏。

importrandom# 1. 生成一个1到100之间的随机数target_number=random.randint(1,100)guess_count=0max_attempts=7print("欢迎来到猜数字游戏!")print(f"我已经想好了一个1到100之间的数字,你有{max_attempts}次机会。")# 2. 使用while循环,让玩家可以多次猜测whileguess_count<max_attempts:# 3. 获取玩家输入try:guess=int(input("请输入你的猜测:"))exceptValueError:print("请输入一个有效的整数!")continue# 输入无效,跳过本次循环,不消耗次数guess_count+=1# 4. 使用if-elif-else进行判断ifguess==target_number:print(f"恭喜你!猜对了!就是{target_number}。你用了{guess_count}次。")break# 猜对了,使用break退出循环elifguess<target_number:print("猜小了,再大一点。")else:print("猜大了,再小一点。")# 5. 使用if判断是否还有机会remaining=max_attempts-guess_countifremaining>0:print(f"你还有{remaining}次机会。")else:print(f"很遗憾,机会用完了。正确的数字是:{target_number}")print("游戏结束。")

总结

概念作用关键点
缩进定义代码块4个空格,同一层级必须对齐
if-elif-else条件判断,分支执行从上到下判断,执行一个分支后跳出
三元表达式简洁的条件赋值值1 if 条件 else 值2
for循环遍历可迭代对象常用于固定次数的循环或遍历集合
while循环条件循环注意更新条件,防止无限循环
break立即终止整个循环跳出循环体
continue跳过本次循环的剩余部分进入下一次迭代
http://www.jsqmd.com/news/1113217/

相关文章:

  • 工程成本管理系统如何精准控支出,规避超支核算滞后与盈亏模糊问题
  • 全球首份大语言模型安全防范能力测评报告在北京发布
  • 内网渗透测试中SharpScan工具的5个关键配置错误与规避策略
  • Linux第四次实验作业
  • CNC五轴加工干货:一文看懂哪些零件适合选这种工艺
  • Java加密开发实战:InvalidKeyException异常深度解析与解决方案
  • 国内四向车公司有哪些?2026年头部玩家实力对比
  • Linux的基础知识和常见命令
  • 模拟开关和继电器该怎么选?
  • 福特:曾借 AI 裁员,如今召回资深工程师修复系统,还称未放弃 AI
  • ORB-SLAM3 DetectRelocalizationCandidates
  • 如何用STM32F103C8T6实现精准温度控制:从零开始的完整项目指南
  • 【JAVA毕设源码分享】基于springboot通用预约系统的设计与实现(程序+文档+代码讲解+一条龙定制)
  • Burp Suite API实战:从Extender插件到REST API的自动化安全测试
  • 大模型推理总是卡顿?你可能被传统的“三网分离”网络架构坑了
  • 网盘直链下载助手:2025年最实用的八大网盘高速下载解决方案
  • 一文搞懂 GEO,AI 时代取代 SEO 的全新优化逻辑
  • 数字人口播怎么做获客?从内容生产到信任建立的一套思路(2026)
  • 小型语言模型SLM:面向边缘设备的智能引擎设计与落地
  • 一洽邮箱接入
  • 微博上的世界杯品牌营销:中国品牌如何把广告变成“社交梗“
  • 部署nginx多站点游戏
  • 开源扫地机器人 OOMWOO 项目启动:可自造、本地运行,邀你参与构建!
  • 为什么新手也能搞定朱雀检测?
  • gRPC微服务安全加固实战:从TLS配置到纵深防御的六层防护
  • 告别高额研发、数据孤岛,中钧科技全流程助力实体经济数字化升级!
  • 数字人营销视频工具推荐:适合品牌获客与内容转化的选择思路(2026)
  • 第一章Netty,Worker代码优化后分析
  • 欧朋浏览器推新防护功能,可防“点击修复”攻击!
  • 存储超级周期众生相:原厂拧巴画饼、中游分化挣扎、终端苦不堪言