目录
- 程序的三大流程
- 分支结构
- 程序中的判断
- 判断的定义
- if 判断语句基本语法
- else 处理条件不满足的情况
- 逻辑运算
- `and`
- `or`
- `not`
- if 语句进阶
- `elif`
- `if` 的嵌套
- 循环结构
- while循环
- `while` 循环基本使用
- `while` 语句基本语法
- 死循环
- Python 中的计数方法
- 循环计算
- 需求进阶
- break 和 continue
- break
- continue
- `while` 循环嵌套
- for循环
- for语句基本语法
- 序列
- 元组与字符串
- range()
- 能转换成序列的数据
- zip()
- enumerate()
程序的三大流程
- 在程序开发中,一共有三种流程方式:
- 顺序——从上向下,顺序执行代码
- 分支—— 根据条件判断,决定执行代码的分支
- 循环—— 让特定代码 重复执行
分支结构
程序中的判断
if 今天发工资:先还信用卡的钱
if 有剩余:
又可以happy了,O(∩_∩)O哈哈~
else:
噢,no。。。还的等30天
else:
判断的定义
- 如果条件满足,才能做某件事情,
- 如果条件不满足,就做另外一件事情,或者什么也不做
正是因为有了判断,才使得程序世界丰富多彩,充满变化!
判断语句 又被称为 “分支语句”,正是因为有了判断,才让程序有了很多的分支
if 判断语句基本语法
在 Python 中,if 语句 就是用来进行判断的,格式如下:
if 要判断的条件:注意:代码的缩进为一个 tab 键,或者 4 个空格 —— 建议使用空格
- 在 Python 开发中,Tab 和空格不要混用!
我们可以把整个 if 语句看成一个完整的代码块
else 处理条件不满足的情况
思考
在使用 if 判断时,只能做到满足条件时要做的事情。那如果需要在 不满足条件的时候,做某些事情,该如何做呢?
答案
else,格式如下:
if 要判断的条件:条件成立时,要做的事情
……
else:
注意:
- if 和else 语句以及各自的缩进部分共同是一个完整的代码块
逻辑运算
- 在程序开发中,通常在判断条件时,会需要同时判断多个条件
- 只有多个条件都满足,才能够执行后续代码,这个时候需要使用到逻辑运算符
- 逻辑运算符可以把多个条件按照逻辑进行连接,变成更复杂的条件
- 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
- 语法格式如下:
条件1满足执行的代码
……
elif 条件2:
条件2满足时,执行的代码
……
elif 条件3:
条件3满足时,执行的代码
……
else:
- 对比逻辑运算符的代码
条件1满足 并且 条件2满足 执行的代码
……
注意
if 的嵌套
elif 的应用场景是:同时 判断 多个条件,所有的条件是 平级 的
- 在开发中,使用if 进行条件判断,如果希望在条件成立的执行语句中再增加条件判断,就可以使用if 的嵌套
- if 的嵌套的应用场景就是:在之前条件满足的前提下,再增加额外的判断
- if 的嵌套的语法格式,除了缩进之外和之前的没有区别
- 语法格式如下:
条件 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 开始
循环计算
在程序开发中,通常会遇到 利用循环 重复计算 的需求
遇到这种需求,可以:
需求
- 计算 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 之间 所有偶数的累计求和结果
开发步骤
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
break 和 continue 是专门在循环中使用的关键字
- break某一条件满足时,退出循环,不再执行后续重复的代码
- continue某一条件满足时,不执行后续重复的代码
break 和 continue 只针对 当前所在循环 有效
break
- 在循环过程中,如果某一个条件满足后,不再希望循环继续执行,可以使用break 退出循环
while i < 10:
# break 某一条件满足时,退出循环,不再执行后续重复的代码
# i == 3
if i == 3:
break
print(i)
i += 1
print("over")
break 只针对当前所在循环有效
continue
- 在循环过程中,如果某一个条件满足后,不希望执行循环代码,但是又不希望退出循环,可以使用continue
- 也就是:在整个循环中,只有某些条件,不需要执行循环代码,而其他条件都需要执行
while i < 10:
# 当 i == 7 时,不希望执行需要重复执行的代码
if i == 7:
# 在使用 continue 之前,同样应该修改计数器
# 否则会出现死循环
i += 1
continue
# 重复执行的代码
print(i)
i += 1
- 需要注意:使用continue 时,条件处理部分的代码,需要特别注意,不小心会出现死循环
continue 只针对当前所在循环有效
while 循环嵌套
- while 嵌套就是:while 里面还有while
条件满足时,做的事情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对象,你直接打印是打印不出来的
例如:
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 这两个变量去遍历它,就像这样:
names = ['派大星', '章鱼哥', '珊迪']
# 遍历按编号、名字顺序组合起来的数据
for id, name in zip(ids, names):
print(str(id) + '号:' + name)
'''
输出:
1号:派大星
2号:章鱼哥
3号:珊迪
'''
变量 id 在访问到列表 ids 中各个元素的同时,变量 name 也访问到了 names 中对应位置的元素。
enumerate()
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
返回的是一个enumerate对象
例如:
# 为其标上序号,默认从 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那样遍历。