Python基础 --流程控制

目录

程序的三大流程

  • 在程序开发中,一共有三种流程方式:
    • 顺序 —— 从上向下,顺序执行代码
    • 分支 —— 根据条件判断,决定执行代码的 分支
    • 循环 —— 让 特定代码 重复 执行

Python基础 --流程控制

分支结构

程序中的判断

Python基础 --流程控制

if 今天发工资:

    先还信用卡的钱

    if 有剩余:

        又可以happy了,O(∩_∩)O哈哈~

    else:

        噢,no。。。还的等30天
else:

    盼着发工资

判断的定义

  • 如果 条件满足,才能做某件事情,
  • 如果 条件不满足,就做另外一件事情,或者什么也不做

正是因为有了判断,才使得程序世界丰富多彩,充满变化!

判断语句 又被称为 “分支语句”,正是因为有了判断,才让程序有了很多的分支

if 判断语句基本语法

Python 中,if 语句 就是用来进行判断的,格式如下:

if 要判断的条件:
    条件成立时,要做的事情
    ……

注意:代码的缩进为一个 tab 键,或者 4 个空格 —— 建议使用空格

  • 在 Python 开发中,Tab 和空格不要混用!

我们可以把整个 if 语句看成一个完整的代码块

Python基础 --流程控制

else 处理条件不满足的情况

思考

在使用 if 判断时,只能做到满足条件时要做的事情。那如果需要在 不满足条件的时候,做某些事情,该如何做呢?

答案

else,格式如下:

if 要判断的条件:
    条件成立时,要做的事情
    ……
else:
    条件不成立时,要做的事情
    ……

注意

  • ifelse 语句以及各自的缩进部分共同是一个 完整的代码块

逻辑运算

  • 在程序开发中,通常 在判断条件时,会需要同时判断多个条件
  • 只有多个条件都满足,才能够执行后续代码,这个时候需要使用到 逻辑运算符
  • 逻辑运算符 可以把 多个条件 按照 逻辑 进行 连接,变成 更复杂的条件
  • Python 中的 逻辑运算符 包括:与 and或 or非 not 三种

and

条件1 and 条件2
  • 并且
  • 两个条件同时满足,返回 True
  • 只要有一个不满足,就返回 False
条件 1 条件 2 结果
成立 成立 成立
成立 不成立 不成立
不成立 成立 不成立
不成立 不成立 不成立

or

条件1 or 条件2
  • 或者
  • 两个条件只要有一个满足,返回 True
  • 两个条件都不满足,返回 False
条件 1 条件 2 结果
成立 成立 成立
成立 不成立 成立
不成立 成立 成立
不成立 不成立 不成立

not

not 条件
  • 不是
条件 结果
成立 不成立
不成立 成立

if 语句进阶

elif

  • 在开发中,使用 if 可以 判断条件
  • 使用 else 可以处理 条件不成立 的情况
  • 但是,如果希望 再增加一些条件条件不同,需要执行的代码也不同 时,就可以使用 elif
  • 语法格式如下:
if 条件1:
    条件1满足执行的代码
    ……
elif 条件2:
    条件2满足时,执行的代码
    ……
elif 条件3:
    条件3满足时,执行的代码
    ……
else:
    以上条件都不满足时,执行的代码
    ……
  • 对比逻辑运算符的代码
if 条件1 and 条件2:
    条件1满足 并且 条件2满足 执行的代码
    ……

注意

  1. elifelse 都必须和 if 联合使用,而不能单独使用
  2. 可以将 ifelifelse 以及各自缩进的代码,看成一个 完整的代码块

if 的嵌套

elif 的应用场景是:同时 判断 多个条件,所有的条件是 平级

  • 在开发中,使用 if 进行条件判断,如果希望 在条件成立的执行语句中增加条件判断,就可以使用 if 的嵌套
  • if 的嵌套 的应用场景就是:在之前条件满足的前提下,再增加额外的判断
  • if 的嵌套 的语法格式,除了缩进之外 和之前的没有区别
  • 语法格式如下:
if 条件 1:
    条件 1 满足执行的代码
    ……
    
    if 条件 1 基础上的条件 2:
        条件 2 满足时,执行的代码
        ……    
        
    # 条件 2 不满足的处理
    else:
        条件 2 不满足时,执行的代码
        
# 条件 1 不满足的处理
else:
    条件1 不满足时,执行的代码
    ……

循环结构

while循环

while 循环基本使用

  • 循环的作用就是让 指定的代码 重复的执行

  • while 循环最常用的应用场景就是 让执行的代码 按照 指定的次数 重复 执行

  • 需求 —— 打印 5 遍 Hello Python

  • 思考 —— 如果要求打印 100 遍怎么办?

while 语句基本语法

初始条件设置 —— 通常是重复执行的 计数器

while 条件(判断 计数器 是否达到 目标次数):
    条件满足时,做的事情1
    条件满足时,做的事情2
    条件满足时,做的事情3
    ...(省略)...
    
    处理条件(计数器 + 1)

注意

  • while 语句以及缩进部分是一个 完整的代码块

注意:循环结束后,之前定义的计数器条件的数值是依旧存在的

死循环

由于程序员的原因,忘记 在循环内部 修改循环的判断条件,导致循环持续执行,程序无法终止!

Python 中的计数方法

常见的计数方法有两种,可以分别称为:

  • 自然计数法(从 1 开始)—— 更符合人类的习惯
  • 程序计数法(从 0 开始)—— 几乎所有的程序语言都选择从 0 开始计数

因此,大家在编写程序时,应该尽量养成习惯:除非需求的特殊要求,否则 循环 的计数都从 0 开始

循环计算

在程序开发中,通常会遇到 利用循环 重复计算 的需求

遇到这种需求,可以:

  1. while 上方定义一个变量,用于 存放最终计算结果
  2. 在循环体内部,每次循环都用 最新的计算结果更新 之前定义的变量

需求

  • 计算 0 ~ 100 之间所有数字的累计求和结果
# 计算 0 ~ 100 之间所有数字的累计求和结果
# 0. 定义最终结果的变量
result = 0

# 1. 定义一个整数的变量记录循环的次数
i = 0

# 2. 开始循环
while i <= 100:
    print(i)

    # 每一次循环,都让 result 这个变量和 i 这个计数器相加
    result += i

    # 处理计数器
    i += 1

print("0~100之间的数字求和结果 = %d" % result)

需求进阶

  • 计算 0 ~ 100 之间 所有 偶数 的累计求和结果

开发步骤

  1. 编写循环 确认 要计算的数字
  2. 添加 结果 变量,在循环内部 处理计算结果
# 0. 最终结果
result = 0

# 1. 计数器
i = 0

# 2. 开始循环
while i <= 100:

    # 判断偶数
    if i % 2 == 0:
        print(i)
        result += i

    # 处理计数器
    i += 1

print("0~100之间偶数求和结果 = %d" % result)

break 和 continue

breakcontinue 是专门在循环中使用的关键字

  • break 某一条件满足时,退出循环,不再执行后续重复的代码
  • continue 某一条件满足时,不执行后续重复的代码

breakcontinue 只针对 当前所在循环 有效

Python基础 --流程控制

break

  • 在循环过程中,如果 某一个条件满足后 再希望 循环继续执行,可以使用 break 退出循环
i = 0

while i < 10:

    # break 某一条件满足时,退出循环,不再执行后续重复的代码
    # i == 3
    if i == 3:
        break

    print(i)

    i += 1

print("over")

break 只针对当前所在循环有效

continue

  • 在循环过程中,如果 某一个条件满足后 希望 执行循环代码,但是又不希望退出循环,可以使用 continue
  • 也就是:在整个循环中,只有某些条件,不需要执行循环代码,而其他条件都需要执行
i = 0

while i < 10:

    # 当 i == 7 时,不希望执行需要重复执行的代码
    if i == 7:
        # 在使用 continue 之前,同样应该修改计数器
        # 否则会出现死循环
        i += 1

        continue

    # 重复执行的代码
    print(i)

    i += 1

  • 需要注意:使用 continue 时,条件处理部分的代码,需要特别注意,不小心会出现 死循环

continue 只针对当前所在循环有效

while 循环嵌套

  • while 嵌套就是:while 里面还有 while
while 条件 1:
    条件满足时,做的事情1
    条件满足时,做的事情2
    条件满足时,做的事情3
    ...(省略)...
    
    while 条件 2:
        条件满足时,做的事情1
        条件满足时,做的事情2
        条件满足时,做的事情3
        ...(省略)...
    
        处理条件 2
    
    处理条件 1

字符串中的转义字符

  • \t 在控制台输出一个 制表符,协助在输出文本时 垂直方向 保持对齐
  • \n 在控制台输出一个 换行符

制表符 的功能是在不使用表格的情况下在 垂直方向 按列对齐文本

转义字符 描述
\\ 反斜杠符号
\’ 单引号
\" 双引号
\n 换行
\t 横向制表符
\r 回车

for循环

for语句基本语法

除了 while 循环,Python 中还有一种常用的循环结构——for 循环
Python基础 --流程控制
Python 中的 for 循环是通过 for … in … 语句实现循环的,强调的是对什么 序列 做重复操作。计算机一遇到 for,便会 依次 访问序列中的元素,赋值给变量 i,执行一次循环体。当序列中的元素都访问完一遍,循环自然而然也就停止啦。而这种沿着某条路线,依次对序列中每个元素均做 一次 访问的过程,就叫做 遍历
for 循环的执行过程:
Python基础 --流程控制
图上的代码实际上就是在遍历列表 [0, 1, 2]。每次访问时,Python 把访问到的数字赋值给变量 i,执行 print(i + 1) 语句。所以整段代码的作用就是逐行打印出 1、2、3。
for 后面的变量是可以*取名的。遍历一些纯数字序列时,我们常常取名为 i。不过更多情况下,我们应该尽量取一个易于阅读、有含义的变量名。

序列

在 Python 中,序列 指的是 有序 元素的集合。我们能使用 len() 函数获取它的长度,也能够用 索引 获取指定位置的元素。
列表元组,还有最开始接触的 字符串,都是 Python 中很常用的序列(range()函数返回的也是一个序列)。而 整数浮点数布尔值,它们都是一个个孤立的存在,自然也就不是序列了。

元组与字符串

遍历元组和遍历列表很相似,Python 会从元组第一个元素开始,依次访问到最后一个元素。
遍历 字符串 时,Python 则会从左往右依次访问字符串里的字符。

range()

range函数的用法:
Python基础 --流程控制
range() 函数生成的是一串数字序列,可以使用 list() 函数,把它的返回值转换成列表再使用。其实,range() 函数的返回值可以直接索引,也能通过 len() 函数获取长度,是不折不扣的 序列。

Python3 range() 返回的是一个可迭代对象(类型是对象),而不是列表类型, 所以打印的时候不会打印列表,具体可查阅 Python3 range() 用法说明。

能转换成序列的数据

zip()

它可以把两个列表打包组合起来,这个函数返回一个zip对象,你直接打印是打印不出来的
例如:

ids = [1, 2, 3]
names = ['派大星', '章鱼哥', '珊迪']
name_with_id = list(zip(ids, names))
print(name_with_id)
# 输出:[(1, '派大星'), (2, '章鱼哥'), (3, '珊迪')]

打包后的结果 names_with_ids 实际上按顺序保存一个个形如 (编号, 名字) 的 元组。
zip的对象在遍历的时候是不用转化为list的,它自身就是序列可以遍历。

这种元组结构想要访问到里面的数据:

info = (1, '派大星')
id, name = info
print(id)
# 输出:1
print(name)
# 输出:派大星

这是 Python 中的特殊规则:用逗号 , 分隔开的多个变量,可以 按顺序 一次性获取 序列 中的元素。需要注意的是,序列里有几个元素,就要用多少个变量把它们一一取出来(你不能说取一半就不取了)。
所以对于按编号、名字顺序组合起来的数据 zip(ids, names),我们可以设置 id 和 name 这两个变量去遍历它,就像这样:

ids = [1, 2, 3]
names = ['派大星', '章鱼哥', '珊迪']
# 遍历按编号、名字顺序组合起来的数据
for id, name in zip(ids, names):
  print(str(id) + '号:' + name)
'''
输出:
1号:派大星
2号:章鱼哥
3号:珊迪
'''

变量 id 在访问到列表 ids 中各个元素的同时,变量 name 也访问到了 names 中对应位置的元素。

enumerate()

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
返回的是一个enumerate对象
例如:

names = ['派大星', '章鱼哥', '珊迪']
# 为其标上序号,默认从 0 开始
names_with_id = list(enumerate(names))
print(names_with_id)
# 输出:[(0, '派大星'), (1, '章鱼哥'), (2, '珊迪')]

可以看到,这些序号默认是从 0 开始的,我们也可以传入参数,指定序号开始数字,让结果更符合我们的习惯。

# 指定序号从 1 开始
names_with_id = list(enumerate(names, 1))
print(names_with_id)
# 输出:[(1, '派大星'), (2, '章鱼哥'), (3, '珊迪')]

它的返回值也类似一个个元组,跟zip()函数的返回值一样,所以也可以同zip那样遍历。

上一篇:JavaScript基础3


下一篇:while循环