Python3 | 练气期,流程控制语句!

2024-07-29 10:00:20 浏览数 (3)

[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ]

0x00 前言简述

描述:上一章,我们学习了Python3编程中操作运算符及其运算符的优先级,相信各位初学看友边看、边实践的基础下已经初步掌握它了,这一章我们一起学习Python3编程入门中流程控制的相关语法及实践案例,它也是Python编程中最基础且常用的部分,所以说也是需要我们掌握的。

温馨提示:作者后续实践主要在 Ubuntu 24.04 TLS Python 3.12 Jupyter Notebook 环境中运行,若要配置为作者的学习环境,可参考《#AIGC学习之路》专栏中的流程。

温馨提示:若各位看友在其他平台看到此篇文章,一定要关注公众号【全栈工程师修炼指南】进行持续学习!我们一同学习,一起进步,关注后回复【加群】哟!


0x01 Python3 流程控制语句

描述:在 Python 编程中,流程控制语句是用来控制程序执行顺序的,它分为条件控制循环语句

条件控制关键字:if...elif...elsematch...case( Python 3.10 新增,类似于其他编程中 switch...case 语句)

循环语句关键字:while、for、else、break、continue、pass

1.Python3编程中条件控制

描述:Python 条件语句是通过一条或多条语句的执行结果(True 或者 False)来决定执行的代码块。

1.1 if 语句

描述:在 Python 中,if 条件语句的流程图可以帮助你理解代码的逻辑流,下面是一个简单的 if-elif-else 嵌套条件语句的流程图:

代码语言:javascript复制
graph TD;
    Start["开始"] --> CheckCondition{"条件1?"};
    CheckCondition -- 是 --> Action1["执行操作1"];
    CheckCondition -- 否 --> CheckCondition2{"条件2?"};
    CheckCondition2 -- 是 --> Action2["执行操作2"];
    CheckCondition2 -- 否 --> Action3["执行操作3"];
    Action1 --> End["结束"];
    Action2 --> End;
    Action3 --> End;

语法格式:

方式1.if-elif-else 及嵌套条件语句格式:

代码语言:javascript复制
# 常规
if [表达式1]:
  执行语句
elif [表达式2]:
  执行语句
else:
  执行语句


# 嵌套
if 表达式1:
    语句
    if 表达式2:
        语句
    elif 表达式3:
        语句
    else:
        语句
elif 表达式4:
    语句
else:
    语句

方式2.三元(三目)操作符 语句格式:

代码语言:javascript复制
# Python 是一种极简主义的编程语言,它没有引入? :这个新的运算符,而是使用已有的 if else 关键字来实现相同的功能。
# 如果条件为真时候将x值赋给small,为假时候将y值赋给small
x if 条件 else y  

示例演示

  • 示例1.狗的年龄计算判断。
代码语言:javascript复制
#!/usr/bin/python3
# coding=utf-8
age = int(input("请输入你家狗狗的年龄: "))
print("")
if age <= 0:
    print("你是在逗我吧!")
elif age == 1:
    print("相当于 14 岁的人。")
elif age == 2:
    print("相当于 22 岁的人。")
elif age > 2:
    human = 22   (age -2)*5
    print("对应人类年龄: ", human)
 
# 退出提示
input("点击 enter 键退出")

执行结果:

代码语言:javascript复制
$ python3 dog.py 
请输入你家狗狗的年龄: 1

相当于 14 岁的人。
点击 enter 键退出
  • 示例2.验证输入的数字是否为奇数或偶数。
代码语言:javascript复制
# !/usr/bin/python3
# coding=utf-8
num=int(input("输入一个数字:"))
if num%2==0:
    if num%3==0:
        print ("你输入的数字可以整除 2 和 3")
    else:
        print ("你输入的数字可以整除 2,但不能整除 3")
else:
    if num%3==0:
        print ("你输入的数字可以整除 3,但不能整除 2")
    else:
        print  ("你输入的数字不能整除 2 和 3")
  • 示例3.三目运算符的嵌套使用。
代码语言:javascript复制
# !/usr/bin/python3
# coding=utf-8
num=int(input("输入一个数字:"))
( print("能被 2 或 3 都整除") if num%3==0 else print("能被 2 整除,但不能被 3 整除") ) if num%2==0 else ( print("能被 3 整除,但不能被 2 整除") if num%3==0 else print("不能被 2 或 3 整除"))

补充知识: Python 中的 else 语句联用说明。

  • else 语句跟 if 语句搭,构成“要么怎样,要么不怎样”的语境
  • else 语句跟 for / while 语句搭,构成“干完了能怎样,干不完就别想怎样”的语境
  • else 语句跟 try 语句搭构成“没有问题,那就干吧”的语境
  • else 语句与for/while语句搭配时候, 只有在循环正常执行完成后才会执行 else 语句块的内容。

特别注意

  • Python中不是使用{}包含条件代码块,而是采用缩进的方式来判别执行的代码块;
  • Python中如果 if 语句中的条件过长,可以用接续符 来换行,注意 后的一行要缩进没有要求,可无序缩进,但我们保持代码的可读性一般设置同样的缩进格式。
代码语言:javascript复制
if 2>1 and 3>2 and 4>3 and 
    5>4 and 6>5 and 7>6 and 
    8>7:
    print("OK")
  • Python中当条件结果为0, false, '',[], (), {}, set(), None时都将返回false,当条件不为 0, True, 'None',至少有一个元素的容器对象, 字符串不为空串,则都将返回为真;

类型

False

True

布尔

False(与0等价)

True(与1等价)

数值

0, 0.0

非零的数值

字符串

'', ""(空字符串)

非空字符串

容器

[], (), {}, set()

至少有一个元素的容器对象

None

None

非None对象

  • 三目运算符是可以嵌套, 但需要注意 if 和 else 的配对使用,例如:
代码语言:javascript复制
a if a > b else c if c>d else d
a if a > b else ( c if c>d else d )
1.2 match 语句

描述:从 Python 3.10 开始引入 match...case 条件语句,,也被称为“模式匹配”或“结构化匹配”。有了它我们就不需要再使用一连串的 if-else 来判断,match 后的对象会依次与 case 后的内容进行匹配,如果匹配成功,则执行匹配到的表达式,否则直接跳过,最后的case _:类似于 C 和 Java 中的 default:,当其他 case 都无法匹配时,匹配这条,保证永远会匹配成功。

下图,是一个 match...case 条件语句的流程图:

代码语言:javascript复制
graph TD;
  Start["开始"] --> Match{"匹配表达式"};
  Match -- 匹配模式1 --> Case1["执行操作1"];
  Match -- 匹配模式2 --> Case2["执行操作2"];
  Match -- 匹配模式3 --> Case3["执行操作3"];
  Match -- 默认情况 --> DefaultCase["执行默认操作"];
  Case1 --> End["结束"];
  Case2 --> End;
  Case3 --> End;
  DefaultCase --> End;

语法格式:

代码语言:javascript复制
match subject:
  case <pattern_1>:
      <action_1>
  case <pattern_2>:
      <action_2>
  case <pattern_3>:
      <action_3>
  case _:   # _ 是一个特殊的“占位符”模式,用于匹配任何值(类似于 else)
      <action_wildcard>

使用示例:

  • 示例1.基本模式匹配.
代码语言:javascript复制
x = 10
match x:
  case 10:
    print("x is 10")
  case 20:
    print("x is 20")
  case _:
    print("x is something else")
  • 示例2.对象模式匹配 (重点学习)
代码语言:javascript复制
class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

p = Point(0, 3)
match p:
    case Point(x=0, y=y):
        print(f"Point is on the Y axis at {y}")
    case Point(x=x, y=0):
        print(f"Point is on the X axis at {x}")
    case Point(x, y):
        print(f"Point is at ({x}, {y})")
    case _:
  • 示例3.OR 模式匹配, 使用 | 来表示一个或多个模式。
代码语言:javascript复制
x = 2
match x:
  case 1 | 2 | 3:
    print("x is 1, 2, or 3")
  case _:
    print("x is something else")
  • 示例4.if 模式匹配
代码语言:javascript复制
x = 10
match x:
    case x if x > 5:
        print("x is greater than 5")
    case _:
        print("x is 5 or less")

2.Python3编程中循环语句

描述:Python 循环语句有 for 和 while,当满足循环条件时,就重复执行相应的代码块,此外还设有 break(结束当前循环),continue(跳过本次循环)等循环语句中的关键字用于退出或者跳过循环, 以及 pass 空语句主要为了保持程序结构的完整性。。

特别注意: 循环语句中注意冒号和缩进,另外,在 Python 中没有 do..while 循环。

2.1 while 语句

在 Python 中,while 条件语句用于创建循环结构, 下面是一个 while 条件语句的流程图:

代码语言:javascript复制
graph TD;
  Start["开始"] --> CheckCondition{"条件"};
  CheckCondition -- 是 --> Action["执行操作"];
  Action --> CheckCondition;
  CheckCondition -- 否 --> End["结束"];

语法格式:

代码语言:javascript复制
while (表达式条件):
  为真则执行代码块
else:
  当条件变为 False 时,则执行 else 语句
2.2 for 语句

在 Python 中,for 条件语句用于迭代序列(如列表、元组、字典、集合或字符串)。下面是一个 for 条件语句的流程图:

代码语言:javascript复制
graph TD;
    Start["开始"] --> Initialize{"初始化迭代器"};
    Initialize --> CheckNext{"是否有下一个元素?"};
    CheckNext -- 是 --> Action["执行操作"];
    Action --> CheckNext;
    CheckNext -- 否 --> End["结束"];

语法格式:

代码语言:javascript复制
for 变量 in 表达式:
  循环体
else:
  它在穷尽列表(以for循环)或条件变为 false (以while循环)导致循环终止时被执行, 但循环被break终止时不执行。

示例演示

  • 示例1.使用 while 、for 循环语句分别实现1-100 所有整数的和。
代码语言:javascript复制
# while 循环
num=1
sum=0
while(num <= 100):
  sum  = num
  num  = 1
print("1-100所有整数和为:",sum) # 5050

# for 循环
sum=0
for i in range(1,101):
  sum  = i
print("1-100所有整数和为:",sum) # 5050
  • 示例2.计算十进制转其他进制数。
代码语言:javascript复制
#十进制转化
while True:
    number = input('请输入一个整数(输入Q退出程序):') 
    if number in ['q','Q']:
        break                #如果输入的是q或Q,结束退出
    elif not number.isdigit():
        print('您的输入有误!只能输入整数(输入Q退出程序)!请重新输入')
        continue         #如果输入的数字不是十进制,结束循环,重新开始
    else :
            number = int(number)
            print('十进制 --> 十六进制 :%d -> 0x%x' %(number,number))
            print('十进制 -->   八进制 :%d -> 0o%o' %(number,number))
            print('十进制 -->   二进制 :%d ->'%number,bin(number))
  • 示例3.逆序打印九九乘法表
代码语言:javascript复制
for i in range(9,0,-1):
    for j in range (1,i):
        print("t",end="")
    for k in range (i,10):
        print("%dx%d=%d" % (i,k,k*i), end="t")
    print()

执行结果:

  • 示例4.2~10那些是质数(只能被1或者本身整除的)
代码语言:javascript复制
for x in range(2,10):
    for y in range(2,x):
        if x % y == 0:
            print(x,'不是质数,能被',y , '*', x // y , '得到')
            break
    else:
        #循环中找到元素,它在穷尽列表(以for循环)或条件变为 false (以while循环)导致循环终止时被执行,但循环被break终止时不执行。 
        print(x,'是质数')

执行结果:

代码语言:javascript复制
2 是质数
3 是质数
4 不是质数,能被 2 * 2 得到
5 是质数
6 不是质数,能被 2 * 3 得到
7 是质数
8 不是质数,能被 2 * 4 得到
9 不是质数,能被 3 * 3 得到
2.3 pass 语句

在 Python pass是空语句,是为了保持程序结构的完整性,简单的说它不做任何事情,一般用做占位语句。

使用示例:

代码语言:javascript复制
# 常规使用
if True:
  pass

while True:
  pass  # 等待键盘中断 (Ctrl C)

# 最小的类
class MyEmptyClass:
  pass

0 人点赞