三、流程控制

1. if条件分支结构

如果 Python程序的多行代码之间没有任何流程控制,则程序总是从上向下 依次执行。

但是现实生活中,我经常遇到一些需要做判断的业务流程。比如去银行ATM取款,如果密码输入正确,则可以取款。如果密码输入错误,则提示让用户重新输入密码。

布尔类型和比较运算符

布尔( bool)表达现实生活中的逻辑,即真和假,True表示真,False表示假。

案例:

# 布尔类型定义
b1 = True
b2 = False
print(f"b1={b1},类型是{type(b1)}")
print(f"b1={b2},类型是{type(b2)}")

执行结果:

image-20240503151510270

比较运算符

image-20240503151617801

比较运算符的返回结果是布尔类型。

案例:

# 比较运算符
n1 = 10
n2 = 12
print(f"n1==n2的结果是:{n1==n2}")
print(f"n1!=n2的结果是:{n1!=n2}")
print(f"n1>n2的结果是:{n1>n2}")
print(f"n1>=n2的结果是:{n1>=n2}")
print(f"n1<n2的结果是:{n1<n2}")
print(f"n1<=n2的结果是:{n1<=n2}")

执行结果:

image-20240503151851245

if语句语法格式

if语句基本语法格式

if 判断条件 :
	执行内容...

案例:

age = input("请输入您的年龄:")
age = int(age)
print(f"我今年{age}岁了")
if age >= 18:
    print("已经成年了")
print("我要好好学习,天天向上")

执行结果:

image-20240503152248940

第一 判断条件后面要加冒号:

第二 执行内容前面要有4个空格(或者一个Tab键)

第三 判断条件返回值为布尔类型

if else语句语法格式

if 判断条件 :
	满足条件执行内容...
else :
	不满足条件执行内容

案例:

age = input("请输入你的年龄:")
age = int(age)
if age>= 18:
    print("你已经成年了,要学会独立!")
else:
    print("你还小,要听父母话!")

执行结果:

image-20240503153011635

第一 else后面要加冒号:

第二 else 执行内容前面也是四个空格

if elif else语句语法格式

当有多个条件判断的时候,我们可以通过if elif else来实现

if 条件1:
    条件1满足执行内容
elif 条件2:
    条件2满足执行内容
elif 条件n:
    条件n满足执行内容
else:
    以上条件都不满足执行内容

案例:

score = input("请输入你的成绩:")
score = float(score)
if score >= 90:
    print("成绩优秀!")
elif score >= 80:
    print("成绩良好!")
elif score >=60:
    print("成绩及格!")
else:
    print("成绩不及格!")

执行结果:

image-20240503154132151

if语句的嵌套应用

有时候业务上有多维度复杂条件判断,我们需要用到if语句的嵌套来实现。

举例: 我们在一些游戏网站活动充值时,冲100送 20 冲200送50 ,但是vip用户的话,冲100送 30,冲200送70

代码实现:

vip = False
amount = input("请输入充值金额:")
amount = int(amount)
if amount == 100:
    if vip:
        print("总共充值", 100 + 30)
    else:
        print("总共充值", 100 + 20)
elif amount == 200:
    if vip:
        print("总共充值", 200 + 70)
    else:
        print("总共充值", 200 + 50)

执行结果:

image-20240503155748622

作业:猜数字游戏作业;1到10先随机生成一个数字。 通过if嵌套语句,用户输入数字猜测,猜对了,则直接提示正确,否则提示大了或者小了,最多猜三次。 提示: 通过random.randint()方法可以生成随机数字;

代码:

import random
num = random.randint(1,10)
print(f"生成的随机数字是{num}")
inputNum = input("第一次猜是:")
inputNum = int(inputNum)
if inputNum == num:
    print("恭喜你,第一次就猜中了!")
else:
    if inputNum > num:
        print("对不起,你第一次猜的数大了,请重新输入")
    else:
        print("对不起,你第一次猜的数小了,请重新输入")
    inputNum = input("第二次猜是:")
    inputNum = int(inputNum)
    if inputNum == num:
        print("恭喜你,第二次猜中了!")
    else:
        if inputNum > num:
            print("对不起,你第二次猜的数大了,请重新输入")
        else:
            print("对不起,你第二次猜的数小了,请重新输入")
        inputNum = input("第三次猜是:")
        inputNum = int(inputNum)
        if inputNum == num:
            print("恭喜你,第三次猜中了!")
        else:
            if inputNum > num:
                print("对不起,你第三次猜的数大了,游戏结束")
            else:
                print("对不起,你第三次猜的数小了,游戏结束")

执行结果:

image-20240503172401460

2. while循环结构

循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体。当反复执行这个循环体时,需要在合适的时候把循环条件改为假,从而结束循环;否则循环将一直执行下去,形成死循环。

while循环语句语法格式

初始化语句
while 循环条件:
	循环体
    迭代语句
  • 初始化语句: 一条或多条语句,用于完成一些初始化工作。初始化语句在循环开始之前执行。
  • 循环条件: 这是一个布尔表达式,这个表达式能决定是否执行循环体。
  • 循环体: 这个部分是循环的主体,如果循环条件允许,这个代码块将被重复执行。
  • 迭代语句: 这个部分在一次执行循环体结束后,对循环条件求值之前执行,通常用于控制循环条件中的变量,使得循环在合适的时候结束。

基本案例 1+2+3+...+10 求和 ,用while循环语句实现:

i = 1
sum = 0
while i <= 10:
    sum = sum + i
    i = i + 1
print(f"1+2+3+...+10 求和的值为:{sum}")

执行结果:

image-20240503174123752

一定要有循环终止条件,否则会无限死循环,系统卡死。

while循环嵌套

我们在while循环内部还可以继续通过while循环来实现复杂得应用,比如我们打印二维的行列。

代码实现:

# 定义行
i = 1
# 打印5行
while i <= 5:
    print(f"打印第{i}行")
    # 定义列
    j = 1
    # 打印8列
    while j <= 8:
        print(f"打印第{j}列", end=" ")
        j += 1
    print()
    i += 1
print("哇哇,打印完了")

执行结果:

image-20240503175118503

案例: 通过while循环嵌套打印九九乘法表;

代码实现:

# 列 * 行
hang = 1
while hang <= 9:
    lie = 1
    while lie <= hang:
        print(f"{lie}*{hang}={lie*hang}",end="\t")
        lie += 1
    hang += 1
    print()

执行结果:

image-20240503180048686

在字符串中,有一个特殊的符号 \t 这个是制表符 效果等同于在键盘上按下"TAB"键,所以九九乘法表的每次打印最后,大家加下 end="\t",这样格式就对齐好看了。

3. for循环结构

对于固定数据集的元素挨个操作,我们用for循环遍历更加适合。 这里的数据集常见的是字符串,集合,元组,列表,字典等(我们后面会学到) 我们先通过for循环遍历字符串来讲解。

for循环语句语法格式

for 临时变量 in 待遍历的数据集:
	执行代码

案例1 通过for循环遍历字符串,打印挨个每个字符:

# 定义字符串website
website = "www.baidu.com"
# 通过for循环遍历website字符串,拿到每个字符串字符
for w in website:
    print(w)

执行结果:

image-20240504225255770

案例2 通过for循环遍历字符串,统计特定字符o,打印出个数

char = "中"
str = "你中有我,我中有你"
i = 0
for s in str:
    if s == char:
        i+=1
print(f"\"{str}\"字符串中有{i}个\"{char}\"")

执行结果:

image-20240504225800119

for循环嵌套

在有复杂应用的时候,我们可以通过for循环的嵌套来实现。比如打印二维的行列; 这里先学习下range()方法,获取一个数字序列

案例:

# range(stop) 返回0到stop-1的数字序列
for i in range(10):
    print(i, end=' ')
print()
# range(start,stop) 返回start到stop-1的数字序列
for i in range(3, 10):
    print(i, end=' ')
print()
# range(start,stop,step) 返回start到stop-1的数字序列,步长step
for i in range(3, 10, 2):
    print(i, end=' ')

执行结果:

image-20240504230447456

接下来实现打印二维的行列:

for i in range(1, 5):
    print(f"第{i}行")
    for j in range(1, 11):
        print(f"第{j}列", end=' ')
    print()

执行结果:

image-20240504230855128

4. 循环控制continue和break

为了增强循环控制逻辑能力,python提供了continue和break循环控制支持。

  • continue 中断本次循环,直接进入下一次循环
  • break 直接结束循环

continue案例 ,跳过4打印结果:

# continue案例,跳过4打印
for i in range(1,10):
    if i == 4:
        continue
    print(i,end="\t")

执行结果:image-20240505122242008

break案例 ,遇到4直接结束:

# break案例,遇到4直接结束:
for i in range(1,10):
    if i == 4:
        break
    print(i,end="\t")

执行结果:

image-20240522111402575

5. 循环综合案例-求水仙花数

水仙花数是指一个 3 位数,它的每个数位上的数字的 3次幂之和等于它本身。例如:1^3 + 5^3+ 3^3 =153。

代码实现:

# 数字xyc
for x in range(1, 10): # 百位数x 取值1-9
    for y in range(0, 10): # 十位数y 取值0-9
        for z in range(0, 10): # 个位数z 取值0-9
            s1 = x * 100 + y * 10 + z # 本身值
            s2 = x ** 3 + y ** 3 + z ** 3 # 每个数位上的数字的3次幂之和
            if s1 == s2:
                print(f"水仙花有:{s1}")

执行结果:

image-20240505123019245

最近一次更新 3/20/2025, 7:54:12 AM