Python 基础语法详解(3):顺序语句、条件语句和循环语句一篇讲清楚

Python 基础语法详解(3):顺序语句、条件语句和循环语句一篇讲清楚


🔥 星恒随风: 个人主页 ❄️ 个人专栏: 《指针合集》 《C语言基础》 《数据结构》 《机器学习导论》 《前端基础》 《python基础》 ✨ 数据即知识,压缩即智能


目录

  • [Python 基础语法详解(3):顺序语句、条件语句和循环语句一篇讲清楚](#Python 基础语法详解(3):顺序语句、条件语句和循环语句一篇讲清楚)

前言

在学习 Python 基础语法时,我们前面已经接触过变量、数据类型、输入输出、运算符和类型转换。

这些内容主要解决的是:

数据怎么表示、怎么输入、怎么计算、怎么输出。

但是,真正的程序并不是简单地从头到尾"算一遍"就结束。

很多时候,程序需要根据不同情况做出不同选择,也需要把某些操作反复执行。

比如:

  • 打印 1 到 100;
  • 计算 1 到 100 的和;
  • 不断输入数字,直到用户主动结束。

这些逻辑都离不开三类基础语句:

  • 顺序语句
  • 条件语句
  • 循环语句

这一篇文章就围绕这三类语句展开,帮助你理解 Python 程序到底是如何一步一步执行的。


一、顺序语句:代码默认从上到下执行

默认情况下,Python 程序会按照代码书写顺序,从上到下依次执行。

例如:

python 复制代码
print("1")
print("2")
print("3")

输出结果一定是:

python 复制代码
1
2
3

不会变成:

python 复制代码
3
2
1

这种按照先后顺序依次执行的代码,就叫顺序语句。


二、为什么顺序很重要?

编程是一件非常明确的事情。

计算机不会自己猜测你想先做什么、后做什么。你写在前面的代码先执行,写在后面的代码后执行。

例如:

python 复制代码
a = 10
b = a + 5
print(b)

这段代码的执行顺序是:

  1. 先创建变量 a,并保存 10
  2. 再计算 a + 5,把结果赋给 b
  3. 最后输出 b

输出结果是:

python 复制代码
15

但是如果把顺序写反:

python 复制代码
b = a + 5
a = 10
print(b)

程序会直接报错。

因为执行第一行时,变量 a 还没有被定义。

所以,顺序语句虽然简单,但它是所有程序逻辑的基础。


三、条件语句:让程序拥有"选择能力"

顺序语句只能从上到下执行。

但是现实中的问题经常不是一条路走到底。

比如:

如果成绩大于等于 60,输出"及格";否则输出"不及格"。

这时候就需要条件语句。

条件语句也叫分支语句,它表达的是:

如果某个条件成立,就执行一段代码;否则执行另一段代码。

Python 中常见的条件语句有三种形式:

  • if
  • if-else
  • if-elif-else

下面逐个来看。


四、if 语句:最基础的条件判断

if 是最简单的条件语句。

语法格式:

python 复制代码
if 条件:
    条件成立时执行的代码

示例:

python 复制代码
score = int(input("请输入成绩:"))

if score >= 60:
    print("及格")

如果输入:

python 复制代码
80

输出:

python 复制代码
及格

如果输入:

python 复制代码
50

程序不会输出"及格"。

因为 score >= 60 不成立,if 下面的代码块不会执行。


五、if 语句的执行流程

来看这段代码:

python 复制代码
age = 20

if age >= 18:
    print("已经成年")

print("程序结束")

执行流程是:

  1. 判断 age >= 18 是否成立;
  2. 如果成立,执行 print("已经成年")
  3. 无论条件是否成立,最后都会执行 print("程序结束")

所以输出结果是:

python 复制代码
已经成年
程序结束

如果把 age 改成 16:

python 复制代码
age = 16

if age >= 18:
    print("已经成年")

print("程序结束")

输出结果是:

python 复制代码
程序结束

因为 age >= 18 不成立,所以 if 内部的语句被跳过了。


六、if-else:二选一逻辑

如果希望条件成立时执行一段代码,条件不成立时执行另一段代码,就可以使用 if-else

语法格式:

python 复制代码
if 条件:
    条件成立时执行的代码
else:
    条件不成立时执行的代码

示例:判断一个整数是奇数还是偶数。

python 复制代码
num = int(input("请输入一个整数:"))

if num % 2 == 0:
    print("偶数")
else:
    print("奇数")

如果输入:

python 复制代码
10

输出:

python 复制代码
偶数

如果输入:

python 复制代码
9

输出:

python 复制代码
奇数

这里的核心判断是:

python 复制代码
num % 2 == 0

% 表示取余。

如果一个数除以 2 的余数是 0,说明它是偶数;否则就是奇数。


七、if-else 的核心特点

if-else 表示的是二选一。

也就是说:

  • 条件成立,执行 if 里面的代码;
  • 条件不成立,执行 else 里面的代码。

两条分支一定会执行其中一条,但不会两条都执行。

可以把它理解成岔路口:

条件成立走左边,条件不成立走右边。


八、if-elif-else:多分支判断

有些问题不是二选一,而是多选一。

比如:

输入一个整数,判断它是正数、负数还是 0。

这时候就需要 if-elif-else

语法格式:

python 复制代码
if 条件1:
    条件1成立时执行
elif 条件2:
    条件1不成立,条件2成立时执行
else:
    前面条件都不成立时执行

示例:

python 复制代码
num = int(input("请输入一个整数:"))

if num > 0:
    print("正数")
elif num < 0:
    print("负数")
else:
    print("为 0")

如果输入 10,输出:

python 复制代码
正数

如果输入 -5,输出:

python 复制代码
负数

如果输入 0,输出:

python 复制代码
为 0

九、elif 不是 else if

很多语言中,多分支会写成:

cpp 复制代码
else if

但是 Python 中写的是:

python 复制代码
elif

它可以理解成 else if 的简写。

所以 Python 中不要写:

python 复制代码
else if num < 0:

正确写法是:

python 复制代码
elif num < 0:

十、Python 条件语句的几个语法特点

Python 的条件语句和 C、C++、Java 有明显区别。

1. 条件后面不需要小括号

Python 写法:

python 复制代码
if score >= 60:
    print("及格")

C / C++ / Java 中通常会写:

cpp 复制代码
if (score >= 60)
{
    printf("及格");
}

Python 中不强制写小括号。


2. 条件后面必须有冒号

Python 中,ifelifelse 后面都要写冒号。

正确:

python 复制代码
if score >= 60:
    print("及格")

错误:

python 复制代码
if score >= 60
    print("及格")

少了冒号,程序会直接报语法错误。


3. Python 使用缩进表示代码块

C、C++、Java 通常使用 {} 表示代码块。

Python 使用缩进表示代码块。

python 复制代码
if score >= 60:
    print("及格")
    print("继续努力")

这两行 print 前面都有缩进,所以都属于 if 代码块。


十一、缩进和代码块:Python 最重要的格式规则

代码块指的是一组放在一起执行的代码。

在 Python 中,缩进决定代码属于哪个代码块。

看下面两个例子。


代码 1:两行都属于 if

python 复制代码
a = input("请输入一个整数:")

if a == "1":
    print("hello")
    print("world")

这里:

python 复制代码
print("hello")
print("world")

都有缩进,所以它们都属于 if 代码块。

只有当 a == "1" 成立时,它们才会执行。


代码 2:只有第一行属于 if

python 复制代码
a = input("请输入一个整数:")

if a == "1":
    print("hello")

print("world")

这里:

python 复制代码
print("world")

没有缩进,所以它不属于 if 代码块。

无论 a == "1" 是否成立,它都会执行。


十二、缩进错误会直接报错

Python 对缩进非常严格。

错误写法:

python 复制代码
if True:
print("hello")

正确写法:

python 复制代码
if True:
    print("hello")

建议统一使用 4 个空格表示一级缩进。

不要一会儿用 Tab,一会儿用空格。缩进不统一,会导致代码可读性变差,严重时会直接报错。


十三、嵌套条件语句

条件语句内部还可以继续写条件语句,这叫嵌套条件。

示例:

python 复制代码
a = input("请输入第一个整数:")
b = input("请输入第二个整数:")

if a == "1":
    if b == "2":
        print("hello")
    print("world")

print("python")

这段代码中有三种缩进层级:

python 复制代码
print("hello")

有两级缩进,属于:

python 复制代码
if b == "2":

这个代码块。

python 复制代码
print("world")

有一级缩进,属于:

python 复制代码
if a == "1":

这个代码块。

python 复制代码
print("python")

没有缩进,不属于任何 if,所以无论条件是否成立都会执行。

嵌套条件虽然有用,但不要嵌套太深。

如果一层套一层太多,代码会变得很难读。


十四、练习一:判断奇数和偶数

需求:

输入一个整数,判断它是奇数还是偶数。

代码:

python 复制代码
num = int(input("请输入一个整数:"))

if num % 2 == 0:
    print("偶数")
else:
    print("奇数")

十五、练习二:判断正数、负数和 0

需求:

输入一个整数,判断它是正数、负数还是 0。

代码:

python 复制代码
num = int(input("请输入一个整数:"))

if num > 0:
    print("正数")
elif num < 0:
    print("负数")
else:
    print("为 0")

十六、练习三:判断闰年

闰年的判断规则是:

  1. 普通年份能被 4 整除,并且不能被 100 整除,是闰年;
  2. 世纪年份必须能被 400 整除,才是闰年。

例如:

  • 2000 年是闰年;
  • 1900 年不是闰年;
  • 2024 年是闰年;
  • 2023 年不是闰年。

代码:

python 复制代码
year = int(input("请输入年份:"))

if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
    print("闰年")
else:
    print("平年")

这段代码中:

python 复制代码
year % 4 == 0

表示年份能被 4 整除。

python 复制代码
year % 100 != 0

表示年份不能被 100 整除。

python 复制代码
year % 400 == 0

表示年份能被 400 整除。

注意,不要把最后一部分写成:

python 复制代码
or year % 400

这样逻辑是不严谨的。


十七、pass:什么都不做的空语句

有时候,我们暂时还没想好某个分支里具体写什么,但语法上又必须放一条语句。

这时候可以使用 pass

pass 表示空语句。

它什么都不做,只是占一个位置。

示例:

python 复制代码
num = int(input("请输入一个整数:"))

if num != 1:
    pass
else:
    print("hello")

这段代码的意思是:

  • 如果 num != 1,什么都不做;
  • 否则输出 hello

十八、为什么需要 pass?

下面这种写法是不合法的:

python 复制代码
num = int(input("请输入一个整数:"))

if num != 1:
else:
    print("hello")

因为 if 后面的代码块不能为空。

如果暂时不想写,就可以使用:

python 复制代码
pass

占位。

pass 常见于:

  • 暂时没实现的函数;
  • 暂时没写完的分支;
  • 暂时占位的类;
  • 调试时临时保留结构。

例如:

python 复制代码
def todo():
    pass

十九、循环语句:让代码反复执行

有些任务需要重复执行。

比如:

  • 打印 1 到 10;
  • 计算 1 到 100 的和;
  • 计算 5 的阶乘;
  • 不断输入数字直到用户结束;
  • 遍历一组数据。

如果不用循环,打印 1 到 5 可能要写成:

python 复制代码
print(1)
print(2)
print(3)
print(4)
print(5)

那如果要打印 1 到 100 呢?

显然不可能手写 100 行。

这时候就需要循环。

Python 中最常见的循环有两种:

  • while 循环
  • for 循环

二十、while 循环

while 循环的语法格式是:

python 复制代码
while 条件:
    循环体

含义是:

只要条件成立,就一直执行循环体。

示例:打印 1 到 10。

python 复制代码
num = 1

while num <= 10:
    print(num)
    num += 1

执行流程是:

  1. num 初始值为 1;
  2. 判断 num <= 10
  3. 条件成立,执行循环体;
  4. 输出 num
  5. 执行 num += 1
  6. 回到条件判断;
  7. num 变成 11 时,条件不成立,循环结束。

二十一、while 循环的三个关键点

while 循环时,一般要关注三个部分:

  1. 循环变量初始化;
  2. 循环条件;
  3. 循环变量更新。

例如:

python 复制代码
num = 1              # 初始化

while num <= 10:     # 条件
    print(num)
    num += 1         # 更新

如果忘记更新循环变量:

python 复制代码
num = 1

while num <= 10:
    print(num)

程序会一直输出 1,形成死循环。

所以写 while 时一定要检查:

循环有没有机会结束?


二十二、案例:计算 1 到 100 的和

需求:

求 1 + 2 + 3 + ... + 100。

代码:

python 复制代码
total = 0
num = 1

while num <= 100:
    total += num
    num += 1

print(total)

解释:

  • total 用来保存累加结果;
  • num 从 1 开始;
  • 每次循环把 num 加到 total 中;
  • 然后 num += 1
  • 直到 num 超过 100,循环结束。

二十三、案例:计算 5 的阶乘

阶乘的含义是:

python 复制代码
5! = 1 * 2 * 3 * 4 * 5

代码:

python 复制代码
result = 1
n = 1

while n <= 5:
    result *= n
    n += 1

print(result)

输出:

python 复制代码
120

这里的核心是:

python 复制代码
result *= n

它等价于:

python 复制代码
result = result * n

二十四、案例:求 1! + 2! + 3! + 4! + 5!

这个问题比单独求 5! 更复杂一些。

因为它需要先分别求:

python 复制代码
1!
2!
3!
4!
5!

再把它们加起来。

代码:

python 复制代码
num = 1
total = 0

while num <= 5:
    factor_result = 1
    i = 1

    while i <= num:
        factor_result *= i
        i += 1

    total += factor_result
    num += 1

print(total)

这里使用了两重循环:

  • 外层循环负责控制当前要求几的阶乘;
  • 内层循环负责计算当前这个数的阶乘。

二十五、嵌套循环怎么理解?

对于嵌套循环,可以这样理解:

外层循环每执行一次,内层循环会完整执行一轮。

在上面的案例中:

  • 外层循环第一次:计算 1!
  • 外层循环第二次:计算 2!
  • 外层循环第三次:计算 3!
  • 外层循环第四次:计算 4!
  • 外层循环第五次:计算 5!

内层循环负责完成每一个阶乘的具体乘法。

嵌套循环很常见,但也要注意不要嵌套太深,否则代码会变得难读。


二十六、for 循环

Python 中的 for 循环通常用来遍历一个可迭代对象。

语法格式:

python 复制代码
for 循环变量 in 可迭代对象:
    循环体

所谓可迭代对象,可以简单理解成:

能够一个一个取出元素的数据。

比如:

  • range(...)
  • 字符串
  • 列表
  • 元组
  • 字典

这一篇先重点看 range()for 的配合。


二十七、range() 函数

range() 经常和 for 循环一起使用。

它可以生成一个整数序列。


1. range(stop)

python 复制代码
for i in range(5):
    print(i)

输出:

python 复制代码
0
1
2
3
4

range(5) 生成的是:

python 复制代码
0, 1, 2, 3, 4

不包含 5。


2. range(start, stop)

python 复制代码
for i in range(1, 11):
    print(i)

输出:

python 复制代码
1
2
3
4
5
6
7
8
9
10

range(1, 11) 表示:

从 1 开始,到 11 之前结束。

也就是左闭右开:

python 复制代码
[1, 11)

包含 1,不包含 11。


3. range(start, stop, step)

第三个参数表示步长。

打印 2、4、6、8、10:

python 复制代码
for i in range(2, 12, 2):
    print(i)

倒序打印 10 到 1:

python 复制代码
for i in range(10, 0, -1):
    print(i)

这里的 -1 表示每次减少 1。


二十八、for 循环求 1 到 100 的和

使用 for 循环可以更简洁地完成累加。

python 复制代码
total = 0

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

print(total)

while 版本相比,for 版本不需要手动写:

python 复制代码
i += 1

因为 range() 会自动生成每一个数。


二十九、while 和 for 怎么选?

whilefor 都能实现循环,但使用场景略有不同。

1. 明确知道循环次数,用 for

例如:

python 复制代码
for i in range(10):
    print(i)

适合:

  • 打印固定次数;
  • 遍历一个范围;
  • 遍历列表、字符串等数据。

2. 不确定循环次数,用 while

例如:

python 复制代码
while True:
    password = input("请输入密码:")

    if password == "123456":
        break

适合:

  • 一直输入直到正确;
  • 一直运行直到满足某个条件;
  • 用户菜单系统;
  • 游戏主循环。

一句话总结:

次数明确用 for,条件驱动用 while。


三十、continue:结束本次循环

continue 的作用是:

跳过本次循环剩余代码,直接进入下一次循环。

示例:模拟吃包子,吃第 3 个包子时发现有虫,跳过它。

python 复制代码
for i in range(1, 6):
    if i == 3:
        continue

    print(f"吃完第 {i} 个包子")

输出:

python 复制代码
吃完第 1 个包子
吃完第 2 个包子
吃完第 4 个包子
吃完第 5 个包子

第 3 个包子被跳过了,但循环没有结束,后面的第 4 个、第 5 个仍然继续执行。


三十一、break:结束整个循环

break 的作用是:

直接结束整个循环。

示例:吃第 3 个包子时发现半只虫,直接不吃了。

python 复制代码
for i in range(1, 6):
    if i == 3:
        break

    print(f"吃完第 {i} 个包子")

输出:

python 复制代码
吃完第 1 个包子
吃完第 2 个包子

循环在第 3 次时直接结束,所以第 4 个、第 5 个都不会再处理。


三十二、continue 和 break 的区别

关键字 作用 类比
continue 结束本次循环,进入下一次循环 这个包子不吃了,继续吃下一个
break 结束整个循环 不吃了,直接走人

简单记:

continue 是跳过一次,break 是彻底结束。


三十三、案例:输入若干数字,求平均值

需求:

用户不断输入数字,输入 ; 表示结束,最后输出平均值。

代码:

python 复制代码
total = 0
count = 0

while True:
    num = input("请输入数字,输入 ; 结束:")

    if num == ";":
        break

    num = float(num)
    total += num
    count += 1

if count == 0:
    print("没有输入任何数字")
else:
    print(f"平均值是:{total / count}")

这个案例把多个知识点串起来了:

  • while True 用于持续输入;
  • break 用于结束循环;
  • float() 用于类型转换;
  • total 用于累加;
  • count 用于统计输入数量;
  • 最后通过 total / count 计算平均值。

三十四、常见易错点总结

1. if 后面忘记写冒号

错误:

python 复制代码
if age >= 18
    print("成年")

正确:

python 复制代码
if age >= 18:
    print("成年")

2. 缩进不一致

错误:

python 复制代码
if age >= 18:
    print("成年")
  print("可以工作")

正确:

python 复制代码
if age >= 18:
    print("成年")
    print("可以工作")

3. 把 elif 写成 else if

错误:

python 复制代码
if num > 0:
    print("正数")
else if num < 0:
    print("负数")

正确:

python 复制代码
if num > 0:
    print("正数")
elif num < 0:
    print("负数")

4. while 循环忘记更新变量

错误:

python 复制代码
i = 1

while i <= 10:
    print(i)

这会形成死循环。

正确:

python 复制代码
i = 1

while i <= 10:
    print(i)
    i += 1

5. 混淆 break 和 continue

continue 是跳过本轮循环。

break 是结束整个循环。

这两个关键字都能改变循环流程,但作用完全不同。


6. range 的结束值不包含在内

python 复制代码
range(1, 10)

生成的是:

python 复制代码
1 到 9

不包含 10。

如果想生成 1 到 10,要写:

python 复制代码
range(1, 11)

7. input 得到的是字符串

如果要进行数字比较或运算,要先转换类型:

python 复制代码
age = int(input("请输入年龄:"))

if age >= 18:
    print("成年")

不要直接写:

python 复制代码
age = input("请输入年龄:")

if age >= 18:
    print("成年")

这样会报错,因为字符串不能直接和整数比较大小。


三十六、总结

这一篇主要讲了 Python 基础语法中的控制流程。

第一,顺序语句让程序从上到下依次执行。

第二,条件语句让程序拥有选择能力。

第三,循环语句让程序可以重复执行任务。

其中:

  • if 用于单分支判断;
  • if-else 用于二选一;
  • if-elif-else 用于多分支;
  • 缩进决定代码块归属;
  • pass 用于占位;
  • while 适合条件驱动循环;
  • for 适合遍历范围或可迭代对象;
  • continue 用于跳过本次循环;
  • break 用于结束整个循环。
相关推荐
worilb1 小时前
Spring Cloud 学习与实践(6):Nacos 配置中心
数据库·学习·spring cloud
CHHH_HHH1 小时前
【C++】红黑树:比AVL树更实用的平衡二叉搜索树
开发语言·数据结构·c++·算法·stl
凤头百灵鸟1 小时前
Python语法进阶篇 --- re库、os库、sys库、time库、logging库、random库
python
牛油果子哥q1 小时前
【C++内存对齐与结构体填充】C++内存对齐与结构体填充深度精讲:对齐规则、结构体内存大小计算、填充冗余、笔试真题与工程优化方案
开发语言·c++
零陵上将军_xdr1 小时前
API 签名防重放机制:基于 HMAC-SHA256 的设计与实现
java·学习·安全架构
数智工坊1 小时前
周志华《Machine Learning》学习笔记--第九章--聚类
笔记·学习·机器学习
ch.ju1 小时前
Java程序设计(第3版)第四章——set-get方法
java·开发语言
Amazing_Cacao1 小时前
CFCA精品可可品鉴师初级防御战:刺破营销故事幻象,划定极其硬核的瑕疵风味物理边界
学习
智能制造产品经理代码提升1 小时前
快速搭建PayPal标准API测试框架
开发语言·lua