人生苦又短,而我学Python
三大条件语句,四种推导式
——Lungcen
目录
使用 __next__() 方法遍历生成器对象,也可以获得各个元素
思维导图
条件语句
python语言同C语言、Java语言一样都存在执行的顺序,例如:先执行第1条语句,然后是第2条、第3条……一直到最后一条语句,这称为顺序结构
对条件进行判断,然后根据不同的结果执行不同的代码,这称为选择结构或者分支结构
if else分支语句的三种形式
if 语句
if else 语句
if elif else 语句
if、elif、else 语句的最后都有冒号:,不要忘记
判断表达式是否成立
布尔类型(bool)只有两个值,分别是 True 和 False,Python 会把 True 当做“真”,把 False 当做 “假”。
对于数字,Python 会把 0 和 0.0 当做“假”,把其它值当做“真”。
对于其它类型,当对象为空或者为 None 时,Python 会把它们当做“假”,其它情况当做真。
例如:"" 空字符串
[ ] 空列表
( ) 空元组
{ } 空字典
None 空值 这些表达式是不成立,会当作”假“
if else对缩进的要求
Python是以缩进来标记代码块的,代码块一定要有缩进,没有缩进的不是代码块。另外,同一个代码块的缩进量要相同,缩进量不同的不属于同一个代码块。
缩进多少合适?按照习惯一般建议缩进 1 个 Tab 键的位置又或者缩进 4 个空格
不需要使用代码块的地方千万不要缩进,一旦缩进就会产生一个代码块
if语句嵌套
if 表达式 1:
if 表示式 2:
代码块 1
else:
代码块 2
if 表达式 1:
if 表示式 2:
代码块 1
else:
代码块 2
else:
if 表达式3:
代码块3
else:
代码块4
pass语句及其作用
在实际开发中,有时候我们会先搭建起程序的整体逻辑结构,但是暂时不去实现某些细节,而是在 这些地方加一些注释,方面以后再添加代码
在Python 提供了一种更加专业的做法,就是空语句pass。pass 是 Python 中的关键字,用来 让解释器跳过此处,什么都不做
age = int( input("请输入你的年龄:") )
if age < 12 :
print("婴幼儿")
elif 12 <= age < 18:
print("青少年")
elif 18 <= age < 30:
print("成年人")
elif 30 <= age < 50:
pass
else:
print("老年人")
assert断言函数及用法
assert 语句,又称断言语句,可以看做是功能缩小版的 if 语句,它用于判断某个表达式的 值,如果值为真,则程序可以继续往下执行;反之,Python 解释器会报 AssertionError 错误
# 输入数学成绩,判断成绩是否合法
mathMark = float(input("请输入数学成绩:"))
# 断言数学考试分数是否位于正常范围内
assert 0 <= mathMark <= 100
# 只有当 mathMark 位于 [0,100]范围内,程序才会继续执行
print("数学成绩为:", mathMark)
明明 assert 会令程序崩溃,为什么还要使用它呢?
这是因为,与其让程序在晚些时候崩溃,不如在错误条件出现时,就直接让程序崩溃,这有利于我们对程序排错,提高程序的健壮性。
因此,assert 语句通常用于检查用户的输入是否符合规定,还经常用作程序初期测试和调试过程中的辅助工具。
while循环语句
while 语句执行的具体流程为:
首先判断条件表达式的值,其值为真(True)时,则执行代码块中 的语句,
当执行完毕后,再回过头来重新判断条件表达式的值是否为真,
若仍为真,则继续重新执行代 码块...如此循环,
直到条件表达式的值为假(False),才终止循环。
使用 while 循环时,一定要保证循环条件有变成假的时候,否则这个循环将成为一个死循 环。所谓死循环,指的是无法结束循环的循环结构
for循环及用法详解
1、for 循环进行数值循环
# 实现从 1 到 100 的累加 sum = 0 # range() 函数,此函数是 Python 内置函数,用于生成一系列连续整数 for i in range(101): sum += i print(sum)
2、for循环遍历列表和元组
# 定义列表 lt = ["Hello", "Java", "Python", "C", "C++", [12, 23]] # 使用for循环遍历列表 for ls in lt: print(ls, end=", ")
3、for 循环遍历字典
# 定义字典 dt = { 'Java': '因互联网而火', 'Python': '因人工智能而火', 'PHP': 'web之王' } # 遍历字典keys for key in dt.keys(): print(key, end=" ") print() # 遍历字典values for value in dt.values(): print(value, end=" ") print() # 遍历字典items for item in dt.items(): print(item, end=" ") print() # 直接遍历字典 for d in dt: print(d, end=" ")
循环结构中else用法
无论是 while 循环还是 for 循环,其后都可以紧跟着一个 else 代码块,它的作用是当循环条件为 False 跳出循环时,程序会最先执行 else 代码块中的代码(但是其实加不加else都不影响)
但是如果使用break 跳出当前循环体之后,该循环后的 else 代码块也不会被执行。
循环嵌套及用法
当 2 个(甚至多个)循环结构相互嵌套时,位于外层的循环结构常简称为外层循环或外循环,位于内层的循环结构常简称为内层循环或内循环。
循环嵌套结构的代码,Python 解释器执行的流程为:
1、当外层循环条件为 True 时,则执行外层循环结构中的循环体
2、外层循环体中包含了普通程序和内循环,当内层循环的循环条件为 True 时会执行此循环 中的循环体,直到内层循环条件为 False,跳出内循环
3、如果此时外层循环的条件仍为 True,则返回第 2 步,继续执行外层循环体,直到外层循环 的循环条件为 False
4、当内层循环的循环条件为 False,且外层循环的循环条件也为 False,则整个嵌套循环才算 执行完毕
嵌套循环执行的总次数 = 外循环执行次数 * 内循环执行次数
嵌套循环实现冒泡排序
冒泡排序算法的实现思想遵循以下几步:
1、比较相邻的元素,如果第一个比第二个大,就交换它们两个。
2、从最开始的第一对到结尾的最后一对,对每一对相邻元素做步骤 1 所描述的比较工作,并 将最大的元素放在后面。这样当从最开始的第一对到结尾的最后一对都执行完后,整个序列中的最后一个元素便是最大的数。
3、将循环缩短,除去最后一个数(因为最后一个已经是最大的了),再重复步骤 2 的操作, 得到倒数第二大的数。
4、持续做步骤 3 的操作,每次将循环缩短一位,并得到本次循环中的最大数。直到循环个数 缩短为 1,即没有任何一对数字需 要比较,此时便得到了一个从小到大排序的序列。
lt = [5, 8, 4, 1]
# 使用冒泡排序将列表进行排序
# 外层循环控制比较回合
for i in range(len(lt) - 1):
# 内层循环控制每回合比较的次数
for j in range(len(lt) - 1 - i):
# 如果前一个元素大于后一个元素,则交换位置
if lt[j] > lt[j+1]:
lt[j], lt[j+1] = lt[j+1], lt[j]
print(lt)
lt[j], lt[j+1] = lt[j+1], lt[j]
这个就可以当成一个赋值语句
强制离开当前循环体的办法
break 语句
1、break 语句可以立即终止当前循环的执行,跳出当前所在的循环结构。无论是 while 循环还是 for 循环,只要执行 break 语句,就会直接结束当前正在执行的循环体。
2、break 跳出当前循环体之后,该循环后的 else 代码块也不会被执行。
3、break 语句只会终止所在循环体的执行,而不会作用于所有的循 环体
continue 语句
只会终止执行本次循环中剩下的代码,直接从下一次循环继续执行
推导式详解
推导式(又称解析器),是 Python 独有的一种特性。使用推导式可以快速生成列表、元组、字典 以及集合类型的数据,因此推导式又可细分为列表推导式、元组推导式、字典推导式以及集合推导式。
列表推导式
[表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] ]
[if 条件表达式] 不是必须的
列表推导式可以利用 range 区间、元组、列表、字典和集合等数据类型,快速生成一个满足指定需求的列表
普通的for循坏
for i in range(10):
print(i ** 2, end=" ")
print()
list1 = [i ** 2 for i in range(10)]
print(list1)
带有判断语句
for i in range(10):
if i % 2 == 0:
print(i, end=" ")
print()
list1 = [i for i in range(10) if i % 2 == 0]
print(list1)
双层for循环
d_list = []
for x in range(3):
for y in range(4):
d_list.append((x, y))
print(d_list)
list1 = [(x, y) for x in range(3) for y in range(4)]
print(list1)
元组推导式
(表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] )
元组推导式可以利用 range 区间、元组、列表、字典和集合等数据类型,快速生成一个满足指定需 求的元组
# 利用元组推导式生成元组
dt = (x for x in range(1, 10))
print(dt)
# 元组推导式生成的结果并不是一个元组,而是一个生成器对象,这一点和列表推导式是不同的
元组推导式生成的结果并不是一个元组,而是一个生成器对象, 这一点和列表推导式是不同的
使用 tuple() 函数,可以直接将生成器对象转换成元组
# 利用元组推导式生成元组
dt = (x for x in range(1, 10))
print(tuple(dt))
直接使用 for 循环遍历生成器对象,可以获得各个元素
# 利用元组推导式生成元组
dt = (x for x in range(1, 10))
for i in dt:
print(i, end=" ")
使用 __next__() 方法遍历生成器对象,也可以获得各个元素
# 利用元组推导式生成元组
dt = (x for x in range(1, 10))
for i in range(9):
print(dt.__next__(), end=" ")
无论是使用 for 循环遍历生成器对象,还是使用 __next__() 方法遍历生成器对象,遍历后原生成器对象将不复存在,这就是遍历后转换原生成器对象却得到空元组的原因
字典推导式
{表达式 for 迭代变量 in 可迭代对象 [if 条件表达式]}
Python 中,使用字典推导式可以借助列表、元组、字典、集合以及 range 区间,快速生成符合需求的字典
交换现有字典中各键值对的键和值
listDemo = {'Lungcen', 'www.baidu.com'}
# 将列表中各字符串值为键,各字符串的长度为值,组成键值对
newDict = {key: len(key) for key in listDemo}
print(newDict)
# 交换字典的k和v
dt = {v: k for k, v in newDict.items()}
print(dt)
集合推导式
Python中,使用集合推导式可以借助列表、元组、字典、集合以及 range 区间,快速生成符合需求的集合
集合推导式和字典推导式的格式完全相同,那么给定一个类似的推导式,如何判 断是哪种推导式呢?最简单直接的方式,就是根据表达式进行判断,如果表达式以键值对(key: value)的形式,则证明此推导式是字典推导式;反之,则是集合推导式。
Python内置函数
zip函数及用法
zip() 函数是 Python内置函数之一,它可以将多个序列(列表、元组、字典、集合、字符串以及 range() 区间构成的列表)“压缩”成一个 zip 对象。所谓“压缩”,其实就是将这些序列中对应位置的元素 重新组合,生成一个个新的元组。
zip() 函数“压缩”多个序列时,它会分别取 各序列中第 1 个元素、第 2 个元素、... 第 n 个元素,各自组成新的元组。需要注意的是,当多个序列 中元素个数不一致时,会以最短的序列为准进行压缩。
reversed函数及用法
reserved() 是 Python 内置函数之一,其功能是对于给定的序列(包括列表、元组、字符串以及 range(n) 区间),该函数可以返回一个逆序序列的迭代器(用于遍历该逆序序列)
使用 reversed() 函数进行逆序操作,并不会修改原来序列中元素的顺序
sorted函数及用法
sorted() 作为 Python内置函数之一,其功能是对序列(列表、元组、字典、集合、还包括字符 串)进行排序
list = sorted(iterable, key=None, reverse=False)
其中,iterable 表示指定的序列,key 参数可以自定义排序规则;
key 参数和 reverse 参数是可选参数,即可以使用,也可以忽略。
reverse 参数指定以升序 (False,默认)还是降序(True)进行排序。
sorted() 函数会返回一个排好序的列表。
lt1 = [5, 3, 4, 2, 1]
print(sorted(lt1)) # 默认升序排序
print(sorted(lt1, reverse=True)) # 降序排序
tup = (5, 4, 3, 1, 2)
print(sorted(tup)) # 对元组进行排序
print(sorted(tup, reverse=True)) # 降序排序
dic = {4: 1, 5: 2, 3: 3, 2: 6, 1: 8}
print(sorted(dic.items())) # 字典默认按照key进行排序
print(sorted(dic, reverse=True)) # 降序排序
st = {1, 5, 3, 2, 4}
print(sorted(st)) # 对集合进行排序
print(sorted(st, reverse=True)) # 降序排序
str1 = "51423"
print(sorted(str1)) # 对字符串进行排序
print(sorted(str1, reverse=True)) # 降序排序
人生苦又短,而我学Python
三大条件语句,四种推导式
——Lungcen