Python基础 — 流程控制

导读:本篇文章讲解 Python基础 — 流程控制,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

也许你感觉自己的努力总是徒劳无功,但不必怀疑,你每天都离顶点更进一步。今天的你离顶点还遥遥无期。但你通过今天的努力,积蓄了明天勇攀高峰的力量。加油!

程序的三大流程

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

请添加图片描述

分支结构

程序中的判断

请添加图片描述

if 今天发工资:

    先还信用卡的钱

    if 有剩余:

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

    else:

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

    盼着发工资

判断的定义

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

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

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

if 判断语句基本语法

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

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

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

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

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

请添加图片描述

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 只针对 当前所在循环 有效

请添加图片描述

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

序列

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

元组与字符串

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

range()

range函数的用法:
在这里插入图片描述
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那样遍历。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/122305.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!