前言
Python 的逻辑处理可以归纳为两件事:根据条件选择要执行的代码,以及重复执行一组操作。这篇文章依次整理 if 条件判断、match 模式匹配、while 与 for 循环,再用求和、图形打印、九九乘法表和猜数字练习把这些语法串起来。
一、if 条件判断
if 用于判断第一个条件,elif 可以继续补充条件,else 负责接收前面条件都不成立的情况。Python 使用缩进划分代码块,同一分支中的语句必须保持相同缩进。
# if相关语法,有缩进
score = 580
if score >= 700:
print("优秀")
elif score >= 600:
print("及格")
else:
print("不及格")
条件会从上到下依次判断,并且只执行第一个成立的分支。多个条件存在包含关系时,应先写范围更小、要求更高的条件。因此,700 分的判断要放在 600 分之前;如果先判断 score 大于等于 600,700 分也会在这个分支结束判断,后面的“优秀”分支永远不会执行。
这段代码中,score 为 580,前两个条件都不成立,最终输出:
不及格
二、match 模式匹配
当一个值需要和多个固定结果比较时,match 可以让分支结构更清楚。Python 从 3.10 开始支持 match 语句。
# 模式匹配 match...case,类似 switch
day = input("请输入1-7:")
match day:
case "1":
print("星期一")
case "2":
print("星期二")
case "3":
print("星期三")
case "4":
print("星期四")
case "5":
print("星期五")
case "6" | "7":
print("星期六或星期日")
# 其他情况
case _:
print("输入错误")
input 返回字符串,所以各个 case 使用的是字符串“1”到“7”,不能直接写成整数。竖线表示“或”,因此输入 6 或 7 都会进入同一个分支;下划线是通配模式,用来接收其他输入。
match 和正则表达式中的 re.match 没有关系,使用这种语法不需要导入 re 模块。它与 Java 的 switch 有相似的分支效果,但 Python 的 match 还能继续处理序列、映射和对象等结构化模式。
三、while 循环
while 会在条件成立时反复执行循环体。循环体内需要改变参与判断的变量,否则可能形成无限循环。
# 循环:1. while循环 else
i = 0
while i < 10:
print(i)
i = i + 1
else:
print("结束")
i 从 0 开始,每轮加 1。当 i 变成 10 时,条件不再成立,循环正常结束,随后执行 else,最终输出 0 到 9 和“结束”。
while 后面的 else 只在循环正常结束时执行。如果循环通过 break 提前退出,else 不会执行。这个规则也适用于 for 循环。
四、for 循环与 range
for 适合逐个遍历字符串、列表、range 对象等可迭代对象。
# 循环:2. for循环
msg = "hello"
for i in range(1, 10):
print(i)
for char in msg:
print(char)
第一个循环输出 1 到 9,第二个循环依次输出 hello 中的每个字符。range 常见的三种写法如下:
| 写法 | 生成的整数 | 说明 |
|---|---|---|
range(5) | 0、1、2、3、4 | 从 0 开始 |
range(2, 8) | 2、3、4、5、6、7 | 指定起点和终点 |
range(0, 10, 2) | 0、2、4、6、8 | 第三个参数指定步长 |
range 包含起点,不包含终点。需要遍历 1 到 100 时,终点应写成 101。
五、循环练习一:按条件求和
1. 计算 1 到 100 的所有奇数之和
第一种写法遍历全部整数,再用取模运算筛选奇数:
# 需求1:计算1-100所有奇数和
total = 0
for i in range(1, 101):
if i % 2 != 0:
total += i
print(total)
第二种写法从 1 开始,每次增加 2,range 生成的每个数都是奇数:
total = 0
for i in range(1, 101, 2):
total += i
print(total)
两种写法都会输出 2500。第一种更直观地体现“遍历后判断”,第二种直接用步长表达数据规律。
2. 计算 100 到 500 的所有 3 的倍数之和
102 是区间内第一个 3 的倍数,可以从它开始并把步长设为 3:
# 需求2:计算100-500所有3的倍数的数字之和
total = 0
for i in range(102, 501, 3):
total += i
print(total)
也可以遍历完整区间,再判断余数是否为 0:
total = 0
for i in range(100, 501):
if i % 3 == 0:
total += i
print(total)
两种写法都会输出 39900。500 不是 3 的倍数,但使用 501 作为终点更准确地表达了“100 到 500”这个闭区间。
六、循环练习二:嵌套循环与格式输出
1. 控制 print 是否换行
print 默认在输出末尾换行。设置 end 参数后,可以让多次输出留在同一行:
# 循环输出不换行
m = 5
for i in range(m):
print("m,", end="")
这段代码输出五次文字“m,”。如果希望输出变量 m 的值,应将第一个参数改为 m,并把逗号传给 end 参数。
2. 输出矩形
嵌套循环中,外层循环控制行数,内层循环控制每行输出的内容:
# 循环嵌套
m = 5
j = 3
for i in range(m):
for k in range(j):
print("*", end="")
print()
外层执行 5 次,内层每次输出 3 个星号,结果是一个 5 行 3 列的矩形:
***
***
***
***
***
内层循环结束后的 print 没有输出内容,只负责换行。
3. 输出递增三角形
需要输出 1 到 5 个星号时,外层循环可以从 1 开始:
# 从1-m,逐渐增加
m = 5
for row in range(1, m + 1):
for column in range(row):
print("*", end="")
print()
*
**
***
****
*****
如果外层使用 range(m),row 会取 0 到 4,第一行将是空行,并且最后一行只有 4 个星号。
4. 打印九九乘法表
九九乘法表的第 j 行包含 j 个算式,所以内层循环的终点要写成 j + 1:
# 打印99乘法表
m = 10
for j in range(1, m):
for k in range(1, j + 1):
print(f"{k}x{j}={k * j}", end="\t")
print()
外层 j 的范围是 1 到 9,决定当前行;内层 k 的范围是 1 到 j,决定这一行有多少个算式。f-string 中的 k * j 计算乘积,制表符让相邻算式保留间隔。
七、综合练习:猜数字
猜数字程序先生成 1 到 100 之间的随机整数,再使用无限循环接收输入。猜大、猜小时给出提示,猜中后通过 break 结束循环。
# 创建随机数
import random
random_num = random.randint(1, 100)
while True:
num = int(input("请输入一个数字:"))
if num > random_num:
print("太大")
elif num < random_num:
print("太小")
else:
print("猜中了")
break
random_num 在循环外生成,因此一轮游戏的目标数字保持不变。randint 的起点和终点都可能被取到,所以这里的随机数范围确实是 1 到 100。
这个基础版本假设用户输入整数。input 读取到的是字符串,int 负责转换;输入空字符串、字母或 3.5 时会抛出 ValueError。若程序需要持续运行,应再增加异常处理和 1 到 100 的范围检查。
总结
if 和 match 负责选择执行路径,while 和 for 负责重复执行操作。编写这类代码时,应重点检查分支顺序、缩进、range 的终点、循环变量是否变化以及 break 的退出位置;这些细节决定程序是否进入预期分支、循环次数是否正确。
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/2502_94242477/article/details/167391843




