程序猿乐锅头像
关注
【从0-1学习Python | 第二篇】 Python 逻辑处理封面图

【从0-1学习Python | 第二篇】 Python 逻辑处理

前言

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

文章来源转载

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--