惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

大猫的无限游戏
大猫的无限游戏
H
Help Net Security
The Cloudflare Blog
Y
Y Combinator Blog
A
Arctic Wolf
Cyberwarzone
Cyberwarzone
G
Google Developers Blog
Recent Announcements
Recent Announcements
S
SegmentFault 最新的问题
Microsoft Security Blog
Microsoft Security Blog
WordPress大学
WordPress大学
博客园 - Franky
罗磊的独立博客
Martin Fowler
Martin Fowler
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
博客园 - 三生石上(FineUI控件)
N
News and Events Feed by Topic
F
Fortinet All Blogs
N
News | PayPal Newsroom
J
Java Code Geeks
www.infosecurity-magazine.com
www.infosecurity-magazine.com
博客园 - 【当耐特】
M
MIT News - Artificial intelligence
Google Online Security Blog
Google Online Security Blog
Recorded Future
Recorded Future
博客园 - 聂微东
S
Securelist
C
CERT Recently Published Vulnerability Notes
小众软件
小众软件
Cisco Talos Blog
Cisco Talos Blog
S
Security Affairs
NISL@THU
NISL@THU
A
About on SuperTechFans
PCI Perspectives
PCI Perspectives
N
News and Events Feed by Topic
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Jina AI
Jina AI
Microsoft Azure Blog
Microsoft Azure Blog
AWS News Blog
AWS News Blog
GbyAI
GbyAI
C
Cyber Attacks, Cyber Crime and Cyber Security
V
Vulnerabilities – Threatpost
D
Docker
P
Proofpoint News Feed
W
WeLiveSecurity
Help Net Security
Help Net Security
The GitHub Blog
The GitHub Blog
The Last Watchdog
The Last Watchdog
The Hacker News
The Hacker News
博客园 - 叶小钗

qlAD 的技术笔记

2026 年 6 月 7 日 -- 我有社交恐惧症,恐惧外面到处雷电风雨声(大学生活记录) 手把手带你实现哈希表(C/C++ 数据结构) 手把手带你实现图结构(C/C++ 数据结构) 手把手带你实现二叉树(C/C++ 数据结构) 手把手带你实现栈和队列(C/C++ 数据结构) 手把手带你实现单/双链表(C/C++ 数据结构) 手把手带你实现动态数组(C/C++ 数据结构) 2026 年 1 月 2 日 -- 我不怕冷,因为我内心炽热 【2025 年度总结】(大学生活记录) 2025 年 12 月 2 日 -- 省电模式:大一 100 天耗电日志(大学生活记录) 蓝桥杯备赛第一期 —— 枚举与模拟 2025 年 11 月 3 日 -- 用爱发电、大爱无私(大学生活记录) 使用循环嵌套输出规则图形找规律讲解(嵌套循环-图形输出) 2025 年 10 月 1 日 -- 二字开头第一年的生日记录及感悟随笔(大学生活记录) Python 初级 04 -- 目前为止 Python 中你们做题可能会遇到的问题以及七七八八 2025 年 9 月 24 日 -- 开学后的第一课及军训汇演(大学生活记录) Python 初级 02 -- 基础的数据类型和输入输出 2025 年 9 月 17 日 -- 大连 2025 国际大体联足球世界杯(大学生活记录) Python 初级 01 -- 初识编程、理解计算机语言及程序运行方式 适合大一新生学习编程的前一课 -- 编程先导(编程的本质) 2025 年 9 月 12 日 -- 三天军训感受以及一些七七八八(大学生活记录) 2025 年 9 月 9 日 -- 体检、军训前的准备(大学生活记录) 适合大一新生的计算机基础知识 -- 个人认为足够版 2025 年 9 月 7 日 -- 既来之、则安之(大学生活记录) C++ 程序的内存布局 —— 代码区、全局/静态区、栈区和堆区 联想小新 pro 16 2025 开箱记录:跳过联网、office 激活、更换 win 11 专业版 R 语言中的数学函数 计算机软件著作权申请过程记录 从聚类到回归:用 Python 解析鸢尾花数据集的完整数据科学流程 条件概率、全概率与贝叶斯公式 —— 一篇文章带你死磕概率公式 高中化学物质反应规则表 —— 方程式之间也有规律可循 集合元素性质、关系、子集公式、基本运算 —— 一篇文章带你全方面死磕集合 如何为你的项目选择合适的许可证 -- 全方位指南 解释 3:1 和 9:3:3:1 的详细来源 —— 建立减数分裂与孟德尔遗传学定律之间的联系 重新设置磁盘分区以及 Btrfs 子卷(subvolume)布局的无损方案 零基础实战:用 Docker 启动 dockermailserver 绕过 25 端口封锁搭建个人邮箱服务器 基于 GitHub Actions + OSS 的自托管 APT 仓库全面指南 如何在安装 Debian 时配置 Btrfs 子卷 | 详细分步指南 一个合格的个人网站站长应该知道哪些事? CSS 基础入门教程 —— 选择器、样式声明 HTML 基础入门 —— 基本结构和语法 给博客添加一个文章数据统计的页面 Git 学习笔记(命令备忘表) Anki 牌组选项详细解释与设置 手动编译带有 KernelSU 的 OnePlus 6 内核 安卓类原生系统补全计划 —— PixelExperience(一加 OnePlus) 如何使用 use-sound 为 React 应用添加声音效果 标准化项目的 GitHub Flow 工作流 如何搭建设计自己的博客网站? 使用安知鱼主题同款的 Twikoo 评论组件 配置 GitHub Actions 实现自动化提交百度收录 第00期 | 环境搭建 & 递归 (一) | 基本数列递归 逐字符讲解 C 语言 HelloWorld 程序 2023 年回顾 🤟 Anki:记忆神器,助你高效学习 Gentoo 学习笔记 美化你的 PixelExperience OS Markdown 语法指南 搭建 OneDrive 目录索引 为什么用 65 表示大写字母 A
Python 初级 03 -- 程序设计的三种结构之选择结构和循环结构
qlAD · 2025-09-23 · via qlAD 的技术笔记

cover

一、顺序结构

程序最基础的结构是「顺序结构」—— 就像我们读文章从第一句读到最后一句,代码会从第一行开始,依次执行每一行(上一行执行完才会执行下一行),没有任何‘跳过’或‘重复’。

我们之前讲过的内容都是基于顺序结构,比如:

# 输入圆的半径
r = float(input("请输入圆的半径: "))

# 计算圆的面积
s = 3.14159 * r * r

# 输出圆的面积
print(f"圆的面积是: {s}")

✅ 小贴士:顺序结构中,代码执行顺序完全由 “书写顺序” 决定,比如如果把 print(f"圆的面积是: {s}") 写在 s = 3.14159 _ r _ r 前面,会报错(因为计算面积的变量 s 还没定义)。

二、如何表示条件

因为大多数编程语言的选择结构和循环结构都是需要满足一个条件才能执行的。

比如:如果你已经成年,那么就没有防沉迷,否则,有防沉迷。

循环也是一样的,比如:当满足某个条件时,就一直执行某段代码,直到不满足条件为止。

所以我们先来了解一下如何表示条件。

1、布尔类型

之前已经掌握过了 python 中的数字和字符串类型,现在介绍一种新的类型:布尔类型。布尔类型有 TrueFalse 两个值,分别表示真和假。

同时布尔值可以用整数来表示,Python 会将 True 视为 1,False 视为 0。和之前的两个数据类型一样,可以将其他数据类型转换为布尔值。

就我们学过的数字和字符串来说:除了 0 和空字符串 "",其他数字和字符串都是 True

print(bool(10))        # True
print(bool(0))         # False
print(bool("Hello"))   # True
print(bool(""))        # False

布尔类型的核心作用是「判断对错」—— 比如程序要判断‘用户年龄是否≥18’‘输入的数字是否为偶数’,这些判断的结果只有‘对(True)’或‘错(False)’,正好用布尔值表示。

2、比较运算符

在程序中,条件一般会通过比较和逻辑运算来判断,整个条件被称作条件表达式,条件表达式会返回一个布尔值。比如 age >= 18 就是一个条件表达式。其中的 >= 就是一个比较运算符。

以下假设变量 a 为 10,变量 b 为 20:

运算符描述实例
==等于 - 比较对象是否相等(a == b) 返回 False。
!=不等于 - 比较两个对象是否不相等(a != b) 返回 True。
>大于 - 返回 x 是否大于 y(a > b) 返回 False。
<小于 - 返回 x 是否小于 y。所有比较运算符返回 1 表示真,返回 0 表示假。这分别与特殊的变量 True 和 False 等价。注意,这些变量名的大写。(a < b) 返回 True。
>=大于等于 - 返回 x 是否大于等于 y。(a >= b) 返回 False。
<=小于等于 - 返回 x 是否小于等于 y。(a <= b) 返回 True。

由于网站优化,你看见的不等于可能是不等于这个符号,正确的写法是 “!=”

⚠️ 避坑:不要把 “等于”== 写成赋值 =!age == 18 是 “判断 age 是否等于 18”(返回布尔值),而 age = 18 是 “把 18 赋值给 age”(没有判断功能)。

之前讲过,算数运算符有优先级,同理,比较运算符甚至是所有运算符也都有优先级。

运算符优先级

就目前学过的运算符优先级从高到底整理如下:

运算符描述
()括号
**乘方
* / % //乘、除、取模、取整除
+ -加、减
== != > < >= <=比较运算符

尝试手动计算以下条件表达式的布尔值:

(2 + 3) * 4 >= 15
10 // 3 != 3
2 ** 3 + 1 == 9
2 ** 3 + 1 == 9
7 / 2 <= 3 + 1

三、选择结构

选择结构也叫条件结构,它根据条件判断执行不同的代码。选择结构一般包含两个分支,即满足条件的代码块和不满足条件的代码块。

1、if-else 语句

Python 中的选择结构主要通过 if 语句实现。基本语法如下:

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

注意不要漏写英文冒号,并且缩进要一致。

举一个判断是否成年的例子:

age = int(input("请输入你的年龄: "))
if age >= 18:
    print("你是成年人。")
else:
    print("你是未成年人。")

2、if–elif–else 语句

如果需要多个条件判断,可以使用 elif 语句。比如说成绩评级的例子:

score = float(input("请输入你的成绩: "))

if score >= 90:
    print("优秀")
elif score >= 80:
    print("良好")
elif score >= 70:
    print("中等")
elif score >= 60:
    print("及格")
else:
    print("不及格")

3、嵌套 if 语句

嵌套 if 语句,即在 if 语句内部再嵌套 another if 语句。

num = int(input("请输入一个整数: "))

if num >= 0:
    if num == 0:
        print("你输入的是零。")
    else:
        print("你输入的是正数。")
else:
    print("你输入的是负数。")

四、循环结构

循环结构,即重复执行一段代码。

1、while 循环

while 循环,即当条件为真时,重复执行一段代码。同样需要注意冒号和缩进。基础语法如下:

尝试用 while 计算 1 到 100 的和:

sum = 0
i = 1

while i <= 100:
    sum = sum + i
    i = i + 1

print(sum)

运行结果为:5050

尝试用 while 循环打印 1 到 100 的所有偶数:

i = 1
while i <= 100:
    if i % 2 == 0:
        print(i)

    i = i + 1

2、for 循环

for 循环比 while 循环更简单,但是功能更强大。 for 循环可以遍历一个序列(如列表、字符串等)中的每个元素。基础语法如下:

比如计算 1 到 100 的和:

sum = 0
for i in range(1, 101):
    sum = sum + i

print(sum)

可能你们理解不了 i in ... 是什么意思,只用记住 for 循环是遍历一个序列中的每个元素,然后执行代码。

那么 in 的后面是序列,比如 range(1, 101),表示从 1 到 100。in 的前面是 i 变量,表示遍历的元素。除了 range() 函数,还可以是一个列表或者字符串:

# 遍历字符串
for i in 'hello':
    print(i)

3、range() 函数

对于 for 循环中常用的 range() 函数,它生成一个整数序列,常用于循环控制。range() 函数有三种用法:

  1. range(stop):生成一个从 0 开始,到 stop(不包含)的序列。
  2. range(start, stop):生成一个从 start 开始,到 stop(不包含)的序列。
  3. range(start, stop, step):生成一个从 start 开始,到 stop(不包含),步长为 step 的序列。
for i in range(5):
    print(i)

print("----------")

for i in range(1, 5):
    print(i)

print("----------")


for i in range(1, 5, 2):
    print(i)

4、嵌套 for 循环

尝试使用 for 循环实现九九乘法表。

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

5、for 循环与 while 循环的 “对比”

循环类型核心场景优点示例
while已知 “循环条件”,但不确定循环次数灵活应对条件变化一直接收用户输入,直到输入 “退出”
for已知 “循环次数” 或 “遍历序列”代码简洁,不易出错遍历列表、计算 1-100 的和

比如说当你不知道循环次数,只知道循环条件时,可以使用 while 循环。这时候一般会设计一个变量 i 来记录循环次数。但是要注意需要更新 i 的值,否则会进入死循环。

i = 0
while i < 5:
    print(i)
    i += 1

五、逻辑运算符

逻辑运算和比较运算一样,都是用来构建条件表达式的。逻辑运算符有三个:andornot,被称为逻辑和、逻辑或和逻辑非。

1、逻辑与(and)

使用 and 时,从左到右 进行逻辑运算 (判定输出结果)。一旦遇到 bool 逻辑为 False 的值,则 立刻返回该值 且不再往后运算;否则,所有元素的 bool 逻辑值均为 True,and 将返回 最后一个值。

可以理解为全真才真,一假即假

print(True and True)     # True
print(True and False)    # False
print(False and True)    # False
print(False and False)   # False
print(5 > 3 and 2 < 4)   # True
print(1 and 2 and 3)     # 3

2、逻辑或(or)

使用 or 时,从左到右 进行逻辑运算 (判定输出结果)。一旦遇到 bool 逻辑为 True 的值,则 立刻返回该值 且不再往后运算;否则,所有元素的 bool 逻辑值均为 False,or 将返回 最后一个值。

可以理解成一真即真,全假才假

print(True or False)    # True
print(False or False)   # False
print(5 > 3 or 2 < 4)   # True
print(1 or 2 or 3)      # 1
print('' or 0 or None)  # None

3、逻辑非(not)

not 运算符用起来简单,若元素的 bool 逻辑值为 True,则 not 表达式返回 False;若元素的 bool 逻辑值为 False,则返回 True。

print(not True)     # False
print(not False)    # True
print(not 5 > 3)    # False
print(not 1)        # False
print(not None)     # True

和比较运算符一样,逻辑运算符也是有优先级的,就目前学过的运算符优先级从高到底整理如下:

运算符描述
()括号
**乘方
* / % //乘、除、取模、取整除
+ -加、减
== != > < >= <=比较运算符
not逻辑非 NOT
and逻辑与 AND
or逻辑或 OR

尝试手动计算以下条件表达式的布尔值:

not (2 + 3 ** 2 // 5) == 4 or 6 < 10 and 7 % 4 != 3                               # True
not not (2 ** 2 * 3 // 4 % 5) and 8 - 6 == 2 or 1 > 0 and 2 ** 3 // 4             # True

4、逻辑运算符示例

场景1:判断“年龄≥18 且 有身份证”(必须同时满足才能上网吧)

age = 20
has_id = True
if age >= 18 and has_id:
print("可以进入网吧。")
else:
print("无法进入网吧。")

预期输出:可以进入网吧。

场景2:判断“成绩≥90 或 竞赛获奖”(满足一个就能获得奖学金)

score = 85
is_winner = True
if score >= 90 or is_winner:
print("可以获得奖学金!")
else:
print("暂未达到奖学金要求。")

预期输出:可以获得奖学金!

六、作业

习题来自 DNUI 在线评测系统(内网访问)

1、选择结构

https://acm.neusoft.edu.cn/problem.php?id=1434

习题

2、循环结构

https://acm.neusoft.edu.cn/problem.php?id=1960

习题

https://acm.neusoft.edu.cn/problem.php?id=2154

习题