简体中文
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 条件:
    执行代码

尝试用 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 循环可以遍历一个序列(如列表、字符串等)中的每个元素。基础语法如下:

for 变量 in 序列:
    执行代码

比如计算 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

习题
0
0
0
0