python中的循环控制语句break与continue
学习这两个语句之前,我们要先了解这两个语句是什么意思:
break:中断、打破的意思。所以它的跳出循环的意思
continue:继续的意思,意思是跳过当前条件,继续循环
新需求来了!我们不仅要告诉 Python 循环在何时执行,还要在某个时刻强制终止循环。一切的一切,都需要我们对循环进行更精细的控制。下面我来带你认识两种常用的 循环控制语句,从 break 语句开始吧。
break 语句
break 这个单词有“中断、打破”的意思。用于循环语句时,break 语句常和条件判断一起使用,在满足某个条件时终止整个循环。没错,break 就是这么威武霸气。
在 while 循环和 for 循环里,break 的用法分别是:

现在,蟹老板要求在循环语句中考虑食材余量的问题。我们可以设一个变量 left 表示食材余量,1 份食材可以做 1 个蟹黄堡,每招待一位客人, left 的值就要减 1。
提示:left 这个单词在英语中有“剩余”的含义,是时候来一波扇贝单词联动了ヾ(=・ω・=)o。
那我们要怎么通知 for 循环停下来呢?这就轮到 break 上场了。当仓库没有食材,也就是 left == 0 值为 True 时,触发 break 语句强制终止循环,写成代码就是:
# 店里现在还剩 3 份食材
left = 3for i in range(1, 6):print('为第' + str(i) + '位客人做一份蟹黄堡')# 做完汉堡后,食材余量减 1left -= 1# 如果食材没有剩余,就跳出循环if left == 0:breakprint('食材没有了,明天再来吧')# 输出:
# 为第1位客人做一份蟹黄堡
# 为第2位客人做一份蟹黄堡
# 为第3位客人做一份蟹黄堡
# 食材没有了,明天再来吧
每做出一份蟹黄堡,食材余量 left 的值就减 1,直到满足 if 语句中 left == 0 的判断条件,就通过 break 终止整个循环,到店的前 3 位客人能吃到美味蟹黄堡,后面来的就只能闻闻味儿,明天再来了。
while 循环中也能应用 break 语句跳出整个循环。除此之外,还有一种特殊的用法:使用 break 语句在特定条件下跳出“死循环”(当然啦,因为能用 break 跳出,这里不算严格意义上的死循环)。
之前说过,我们不会傻傻地把 while 循环的循环条件写成 True,除非有意而为之。举个例子🌰,食材还剩 3 份,海绵宝宝要一直做蟹黄堡,直至食材用完就停止循环,代码可以写成:
left = 3while True:# 如果食材没有剩余,就停止做蟹黄堡if left == 0:breakprint('做一份蟹黄堡')# 做一份蟹黄堡,食材数减 1left -= 1print('食材没有了,不做了')# 输出:
# 做一份蟹黄堡
# 做一份蟹黄堡
# 做一份蟹黄堡
# 食材没有了,不做了
上面的代码中循环条件一直为 True 也不会造成真的“死循环”,因为在 left 等于 0 时,循环会被 break 语句强制终止。这相当于将循环条件放到了循环体中,和下面这段代码的功能是一样的:
left = 3# 如果食材有剩余,就一直做蟹黄堡
while left > 0:print('做一份蟹黄堡')left -= 1
break编程练习
整天乐陶陶的海绵宝宝,却有一个苦大仇深的邻居章鱼哥。海绵宝宝和派大星正在玩叫车的游戏,两个人站在路边大喊大叫,把章鱼哥吵得十分烦躁。为了照顾章鱼哥的感受,海绵宝宝和派大星决定,只要章鱼哥出现,就停下游戏以免吵到他。
请你使用 while 循环和 break 语句完善代码,要求:
- 在玩叫车游戏之前,先检查章鱼哥在不在,如果在,就打印 章鱼哥来了,不玩了,并结束循环;
- 如果章鱼哥不在,就一直玩叫车游戏,直到章鱼哥来了再停下来。
注意:别忘了添加正确的缩进哦!
i = 1
while ???
answer = input('章鱼哥在吗?回答在/不在')
# 如果章鱼哥不在,就重复打印👇
print('玩第' + str(i) + '次叫车游戏')
# 如果章鱼哥在,就终止循环并打印👇
print('章鱼哥来了,不玩了')
i = 1
while True:answer = input('章鱼哥在吗?回答在/不在')if answer != '在':# 如果章鱼哥不在,就重复打印👇print('玩第' + str(i) + '次叫车游戏')i += 1else:# 如果章鱼哥在,就终止循环并打印👇print('章鱼哥来了,不玩了')break
但如果使用 break 语句的话,只要痞老板一来,整个循环都会终止,排在后面的客人就没办法拿到蟹黄堡了。有没有什么办法能只跳出这一次循环,而不影响后面的流程呢?
continue 语句就能解决他的烦恼!让我们继续课程,看看它与 break 的异同吧。
continue 语句
continue 这个单词我们都很熟悉了,它的意思是“继续”,指动作或状态的继续或持续不中断。单看这个单词,你就能理解,执行 continue 语句后,循环依然会继续,而不会像 break 一样让整个循环都停下来。
continue 语句也经常和 if 语句搭配使用,用于在特定条件下 跳过当前循环体中的剩余语句,继续进行下一轮循环。执行 continue 语句后,程序会跳回循环开始处,至于本次循环中的剩余代码,就一概不管了。
与 break 语句一样,continue 语句同样要和条件判断结合起来用:
- 在
while循环中,continue意味着继续检查条件; - 在
for循环中,continue则意味着继续遍历序列中的下一个元素


我们回到具体案例里演练一下。海绵宝宝正在使用循环魔法给客人们做蟹黄堡,如果发现客人是痞老板,就把他请出去,继续招待下一位客人。假设排队客人的姓名列表是 names,使用 continue 语句的代码要这样写:
# 建立一个列表,储存客人的名字
names = ['泡芙老师', '珊迪', '痞老板', '章鱼哥']for name in names:if name == '痞老板':print('海绵宝宝拒绝给痞老板做蟹黄堡')continueprint('给' + name + '做一份蟹黄堡')
在遍历到 '痞老板' 时,循环跳过条件满足,通过条件分支触发了 continue 语句。至于跟在 continue 后面的第 8 行代码 print('给' + name + '做一份蟹黄堡') 就被跳过啦。最终代码输出结果如下:
为泡芙老师做一份蟹黄堡
为珊迪做一份蟹黄堡
海绵宝宝拒绝给痞老板做蟹黄堡
为章鱼哥做一份蟹黄堡
编程练习——叫车游戏一
学了 continue 语句后,海绵宝宝和派大星有了新的打算,如果章鱼哥在,暂时先停一下,等他走了就继续开始下一轮游戏,而不是像上一道题那样,遇到章鱼哥就结束玩耍。
请你使用 while 循环和 continue 语句完善代码,要求:
- 海绵宝宝想再玩 3 次叫车游戏,如果满足循环条件,就玩检查章鱼哥在不在,如果在,就打印 章鱼哥来了,等他走了再玩,并跳过本次循环;
- 如果章鱼哥不在,就玩叫车游戏,并继续循环,直至玩够 3 次就终止循环;
- 玩够 3 轮游戏后,海绵宝宝和派大星就要回家了,打印 派大星,明天见!
拓展:为什么这道题要用
while循环来写代码呢?用for循环完成代码会出现什么问题?感兴趣的同学可以自己写代码试一下!再次提示:while循环更适合解决循环次数不确定的问题。
answer = input('章鱼哥在吗?回答在/不在')
print('章鱼哥来了,等他走了再玩')
print('玩第' + str(i) + '次叫车游戏')
print('派大星,明天见!')
完成后代码为:
i = 0
while i in range(3):answer = input('章鱼哥在吗?回答在/不在')if answer == '在':print('章鱼哥来了,等他走了再玩')continueprint('玩第' + str(i + 1) + '次叫车游戏')i += 1
print('派大星,明天见!')
编程练习——叫车游戏二
学了 continue 语句后,海绵宝宝和派大星有了新的打算,如果章鱼哥在,暂时先停一下,等他走了就继续开始下一轮游戏,而不是像上一道题那样,遇到章鱼哥就结束玩耍。
请你使用 while 循环和 continue 语句完善代码,要求:
- 海绵宝宝想再玩 3 次叫车游戏,如果满足循环条件,就玩检查章鱼哥在不在,如果在,就打印 章鱼哥来了,等他走了再玩,并跳过本次循环;
- 如果章鱼哥不在,就玩叫车游戏,并继续循环,直至玩够 3 次就终止循环;
- 玩够 3 轮游戏后,海绵宝宝和派大星就要回家了,打印 派大星,明天见!
拓展:为什么这道题要用
while循环来写代码呢?用for循环完成代码会出现什么问题?感兴趣的同学可以自己写代码试一下!再次提示:while循环更适合解决循环次数不确定的问题。
answer = input('章鱼哥在吗?回答在/不在')
print('章鱼哥来了,等他走了再玩')
print('玩第' + str(i) + '次叫车游戏')
print('派大星,明天见!')
代码优化后:
answer = input('章鱼哥在吗?回答在/不在')
i = 0
while i in range(3):if answer == '在':print('章鱼哥来了,等他走了再玩')answer = input('章鱼哥在吗?回答在/不在')continueelse:i += 1print('玩第' + str(i) + '次叫车游戏')
print('派大星,明天见!')
进阶:列表生成式
在结束本关课程前,老师要为你拓展一个与 for 循环有关的编程“小甜点”:列表生成式。这是 Python 中用来快速生成想要的列表的一种简便方式。
举个例子,我们想将 1 到 10 的平方都存到一个列表中,得到 [1, 4, 9, 16, 25, 36, 49, 64, 81, 100],利用之前的知识可能要这样写:
y = []
for x in range(1, 11):y.append(x * x)
换成列表生成式,一行代码就能得到想要的列表:
y = [x * x for x in range(1, 11)]
print(y)
# 输出:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
把要生成的元素 x * x(这个表达式可以自定义)放到前面,后面加一个 for 循环,Python 就会自动根据遍历到的元素 x 计算出 x * x 的值,一个个存到列表里。
我们甚至还可以在 for 循环后面加上条件判断:
# 筛选出奇数的平方
y = [x * x for x in range(1, 11) if x % 2 == 1]
print(y)
# 输出:[1, 9, 25, 49, 81]
上面的代码如果不用列表生成式,可以写成下面这样,它俩效果一样:
y = []
for x in range(1, 11):if x % 2 == 1:y.append(x * x)
print(y)
# 输出:[1, 9, 25, 49, 81]
总结一下,列表生成式的语法规则如图,你学会了吗?

编程练习
繁忙的一天结束,蟹堡王打烊啦。蟹老板想把单笔大于 70 元的大额订单都筛选出来,你来运用列表生成式的知识帮帮小贝吧。
要求:将列表 orders 中大于 70 的元素筛选出来,保存到列表 large_orders 中。
orders = [91, 4, 20, 67, 24, 13, 84, 40, 77, 47]
解答后:
orders = [91, 4, 20, 67, 24, 13, 84, 40, 77, 47]
large_orders = [order for order in orders if order > 70 ]
print(large_orders)# 输出结果为:[91, 84, 77]
练习题:
海绵宝宝把蟹黄堡的秘方存在一个小小的保险箱里。有天他想检查一下秘方是否安全无虞,却悲催地发现自己忘记密码了 乂(゚Д゚三゚Д゚)乂 ……绝望的海绵宝宝决定求助 Python 之神。
其实,密码破解的问题对 Python 来说很好解决,最简单的方式就是穷举法,用更通俗易懂的方法来讲,也就是 列举所有可能,一个个去试。人工手动去试密码能让人疯掉,而这种事对计算机来说可是小菜一碟。
假设一个四位密码保存在变量 password 里,而我们不知道密码是什么,那就可以让计算机遍历所有 4 位的纯数字,从 1000 遍历到 9999,如果这里面有任何一个数字的值与 password 相等,就把它打印出来,这就是我们要的密码啦。
下面把时间交给你,用上面讲到的思路,帮海绵宝宝写一个密码破解器吧!剧透一下,这道题的代码有好几种写法,你能想到几种呢?
拓展:密码可以通过一次次的尝试暴力破解,现在你知道为什么网站要限制密码输入次数了吧?现实中密码破解的情况会更复杂,我们也要寻求更高效的方法。
# 这两行代码用于生成一个 4 位数的随机密码,请不要更改!
from random import randint
password = randint(1000, 9999)# 用循环找出 password 中存储的值
# 方法一
i = 1000
while i in range(10000):if i == password:print(i)breaki += 1# 方法二
for i in range(10000):if i == password:print(i)break# 方法三
key = [i for i in range(10000) if i == password]
print(key[0])
FizzBuzz游戏
FizzBuzz 是一个经典的聚会游戏:从 1 开始数,到 3 的倍数就替换成“Fizz”,到 5 的倍数就替换成“Buzz”,既能被 3 整除、又能被 5 整除的数则替换成“FizzBuzz”。举
个例子,从 1 数到 15,按 FizzBuzz 替换完成的就是 1,2,Fizz,4,Buzz,Fizz,7,8,Fizz……13,14,FizzBuzz。
现在请你编写一个程序,将从 1 到 100 的数字按 FizzBuzz 的规则来替换,并逐个打印到屏幕上,输出效果如下:
1
2
Fizz
4
Buzz
...
98
Fizz
Buzz
for i in range(1,101):if i % 3 == 0 and i % 5 == 0:print('FizzBuzz')elif i % 3 == 0:print('Fizz')elif i % 5 ==0:print('Buzz')else:print(i)
全部花光
中秋节放假了!公司给小贝和闻闻发了共计 500 元的购物卡,可以到大卖场购买 3 种不同的产品:
- 电动牙刷:85 元
- 漱口水:55 元
- 水杯:40 元
小贝和闻闻商量了一下,她俩想把这 500 元的购物卡正好全部花光,有哪些购买组合呢?
手算非常烧脑,交给 Python 却是分分钟搞定。请完成代码,打印出能把 500 元全部花光的购买组合,代码输出格式如:电动牙刷-0,漱口水-4,水杯-7。
提示:拿到题目毫无头绪?提示一下,可以结合
for循环和range()函数来列举所有可能的情况,再从中挑选能将 500 元恰好花光的购买组合哦。
# 购买牙刷最大数
toothbrush = int(500/85)
# 购买漱口水最大数
mouthwash = int(500/55)
# 购买水杯最大数
water = int(500/40)
for i in range(toothbrush + 1):for j in range(mouthwash + 1):for k in range(water + 1):if i * 85 + j * 55 + k * 40 == 500:print('电动牙刷-' + str(i) + ',漱口水-' + str(j) + ',水杯-' + str(k))
计算阶乘
阶乘指的是一个整数与所有比它小的正整数的乘积,比如 2!= 2 x 1,3!= 3 x 2 x 1。
请补全下面的代码,计算 1 + 2! + 3! + … + 20! 的和,并将这个结果打印出来。
result = 1
n = 1
while n in range(20):n += 1sum = 1for i in range(2,n + 1):sum = sum * iresult = result + sum
print(result)相关文章:
python中的循环控制语句break与continue
学习这两个语句之前,我们要先了解这两个语句是什么意思: break:中断、打破的意思。所以它的跳出循环的意思 continue:继续的意思,意思是跳过当前条件,继续循环 新需求来了!我们不仅要告诉 Py…...
C语言笔记23 •文件操作•
1.为什么要使用文件? 文件,顾名思义就是存储我们所写在电脑上的文本内容。如果没有⽂件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失 了,等再次运⾏程序&#x…...
新项目来了,JDK 17和JDK 21 该如何选择?
博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …...
友顺科技(UTC)分立器件与集成IC产品选型和应用
友顺科技股份有限公司成立于1990年,是全球领先的集成电路与功率半导体厂商 ,集团总部位于台北,生产基地位于福州、厦门。 友顺科技具有完整模拟组件产品线,其中类比IC涵盖各种稳压器、PWM控制IC, 放大器、比较器、逻辑IC、Voltage Translato…...
并发与多线程:创建多个线程,数据共享
数据共享问题分析 1. 只读的数据:安全稳定的,不需要特殊处理; 2. 又读又写的数据:2个线程写,8个线程读,写不好程序会崩。 c11并发于多线程_2章_4节_哔哩哔哩_bilibili...
【机器学习数据挖掘】基于ARIMA 自回归积分滑动平均模型的销售价格库存分析报告 附完整python代码
资源地址:Python数据分析大作业 4000字 图文分析文档 销售分析 完整python代码 完整代码分析 同时销售量后1000的sku品类占比中(不畅销产品)如上,精品类产品占比第一,达到66.7%,其次是香化类产品&#…...
LightGBM 进行回归建模的流程
LightGBM 进行回归建模的流程 文章最前: 我是Octopus,这个名字来源于我的中文名–章鱼;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github ;这博客是记录我学习的点点滴滴,如果您对 Python、Java、AI、算法有…...
【Linux】多进程基础--信号
文章目录 信号常见信号信号定时函数 信号 发生事件时通过信号向进程进行通知,在软件层次上模拟中断,也叫软件中断,处理优先级较高对于前台进程可以通过特殊的字符发送信号,例如CtrlC即给当前进程发送一个SIGINT中断信号。kill命令…...
若依项目部署(Linux2.0)
解压jdk tar -zxvf jdk-8u151-linux-x64.tar.gz 配置Java环境变量: vim /etc/profile 设置环境变量生效: source /etc/profile 查看一下jdk版本: java -version 解压tomcat tar -zxvf apache-tomcat-8.5.20.tar.gz 防火墙设置: …...
python小练习03
1.绘制奥运五环旗 #奥运五环的绘制 import turtle as t t.pensize(3) t.speed(0) def draw_circles():i0while i <4:args [[-60,0,"blue"],[0,0,"black"],[60,0,"red"],[-30,-30,"yellow"],[30,-30,"green"]]#定义一个…...
【机器学习】机器学习在深度学习领域中的作用:半监督学习的视角
👀时空之门👀 🔍引言🎈半监督学习概述🚝机器学习在深度学习领域中的作用☘特征提取与表示学习🍀复杂任务建模❀结合半监督学习提升性能 🚀半监督学习在深度学习中的应用场景📕图像识…...
C#WPF数字大屏项目实战01--开发环境与项目创建
1、学习目标 -界面布局 ,- 模板调整,- 控件封装,- 图表,- 通信对接,- 动态更新 2、开发环境 开发工具:Visual Studio-2022-17.8.6-Community 运行时框架:.Net 6或Framework 4.5以上 UI框…...
python中字符串的各类方法
大小写转换方法 upper() 用于将字符串中的小写字母转为大写字母。 abcd.upper() # ABCD aBcD.upper() # ABCD lower() 用于将字符串中的大写字母转为小写字母。 ABCD.lower() # abcd aBcD.lower() # abcd capitalize() 用于将字符串的第一个字母变成大写࿰…...
DataGrip 数据库连接客户端
I DataGrip 安装 1.1安装 打开dmg镜像,将“DataGrip.app”拖入应用程序中; 1.2 Act 打开应用程序,点击试用模式启动软件,然后将“jetbrains-agent-latest”拖到任意位置,然后拖入,弹出对话框,点击“Rest…...
JS片段:生成 UUID
Hi,这里是松桑,每天学习一个 JS 片段,涨涨🧀!今天带来的是如何生成 UUID,UUID作为全局唯一标识,使用常见广泛,包括分布式系统、数据库主键、会话标识、消息队列、日志追踪等等。 什么…...
小学数学出题器-Word插件-大珩助手
Word大珩助手是一款功能丰富的Office Word插件,旨在提高用户在处理文档时的效率。它具有多种实用的功能,能够帮助用户轻松修改、优化和管理Word文件,从而打造出专业而精美的文档。 【新功能】小学数学出题器 1、实现了难度设定;…...
短剧平台源码:打造个性化娱乐体验的核心功能
在数字化媒体的浪潮中,短剧平台源码扮演着至关重要的角色,它不仅是构建短剧平台的技术基础,更是提供个性化娱乐体验的关键。本文将深入探讨短剧平台源码的核心功能,包括推荐短剧、本周热门/热播、个性化推荐、追剧功能、观看历史、…...
【MySQL】MySQL 图形化界面 - 使用说明(MySQL Workbench)
一、安装软件 Navicat,SQLyog 这些软件都不错,不过都需要收费,当然也有破解版。下面用 MySQL Workbench,它是官方提供的工具。 二、使用操作 这个软件本质是一个客户端,现在要让数据库能够远程登录。不过一般不会远程…...
Shell 编程之免交互
一、Here Document 语法格式: 命令 << 标记 ...... ...... 标记 1.用wc -l的命令统计输入的文字的行数 [rootlocalhost ~]# wc -l <<EOF > aaa > bbb > ccc > EOF 3 备注: 显示行数。 2.整体赋值给变量,通过ech…...
github有趣项目:Verilog在线仿真( DigitalJS+edaplayground)
DigitalJS https://github.com/tilk/digitaljs这个项目是一个用Javascript实现的数字电路模拟器。 它旨在模拟由硬件设计工具合成的电路 像 Yosys(这里是 Github 存储库),它有一个配套项目 yosys2digitaljs,它可以转换 Yosys 将文…...
IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...
