《疯狂Python讲义》读书笔记——第4章 流程控制

本文围绕Python程序结构展开,介绍了顺序结构、if分支结构及断言。详细阐述循环结构,包括while循环、for - in循环的使用,如遍历列表、元组、字典等,还提及循环使用else、嵌套循环、for表达式和常用工具函数。最后说明了使用break、continue、return控制循环结构的方法。
部署运行你感兴趣的模型镜像

目录

 

4.1 顺序结构

4.2 if分支结构

4.2.1 不要忘记缩进

4.2.2 不要随意缩进

4.2.3 不要遗忘冒号

4.2.4 if条件的类型

4.2.5 if分支的逻辑错误

4.2.6 if表达式

4.2.7 pass语句(就是空语句)

4.3 断言(assert)

4.4 循环结构

4.4.1 while循环

4.4.2 使用while循环遍历列表和元组(通过列表或元组的索引)

4.4.3 for-in循环

4.4.4  使用for-in循环遍历列表和元组

4.4.5 使用for-in循环遍历字典

4.4.6 循环使用else

4.4.7 嵌套循环

4.4.8 for表达式

4.4.9 常用工具函数

4.5  控制循环结构

4.5.1 使用break结束循环(强行终止循环,跳出循环体,完全中止循环本身)

4.5.2 使用continue忽略本次循环的剩下语句

4.5.3 使用return结束方法(直接结束整个函数或方法)


4.1 顺序结构

——程序从上到下一行行地执行,中间没有任何判断和跳转。

4.2 if分支结构

Python的if语句有三种形式:

(1)、

if   expression  :
    statements...

(2)、

if  expression:
else :
    statements...

(3)、

if  expression  :
    statements...
elif expression :
    statements...
...    //可以有零条elif语句
else :
    statements...

4.2.1 不要忘记缩进

if条件后的条件执行体一定要缩进,只有缩进后的代码才能算条件执行体。

Python通常建议缩进4个空格。

4.2.2 不要随意缩进

位于同一代码块中的所有语句必须保持相同的缩进,既不能多,也不能少。

4.2.3 不要遗忘冒号

4.2.4 if条件的类型

可以是任意类型。

4.2.5 if分支的逻辑错误

在使用if...else分支语句时,一定要先处理包含范围更小的情形。

例如:

#*****************************
#***程序名称:ifcorrect_test.py
#***程序功能:if分支的正确逻辑
#***编写日期:2019-2-16		
#*****************************
age = 45
if age>60:
	print("老年人")
elif age>40:
	print("中年人")
elif age>20:
	print("青年人")

或者可以改为:

#*****************************
#***程序名称:ifcorrect_test2.py
#***程序功能:if分支的正确逻辑
#***编写日期:2019-2-16		
#*****************************
age = 45
if age>60:
	print("老年人")
#在原本的if条件中增加了else的隐含条件
if age > 40 and not(age > 60):
	print("中年人")
#在原本的if条件中增加了else的隐含条件
if age > 20 and not(age > 60) and not(age >40 and not(age >60)):
	print("青年人")

 

4.2.6 if表达式

相当于其他语言中的三目运算符。(略)

4.2.7 pass语句(就是空语句)

有时候程序需要占一个位,放一条语句,但又不希望这条语句做任何事情,此时就可以用pass语句实现。

例如:

#*****************************
#***程序名称:pass_test.py
#***程序功能:pass空语句可以使程序更完整
#***编写日期:2019-2-16		
#*****************************
s = input("请输入一个整数:")
s = int(s)
if s > 5:
	print("大于5")
elif s < 5:
	#空语句,相当于占位符
	pass
else:
	print("等于5")

4.3 断言(assert)

——和if分支语句有点类似,用于对一个bool表达式进行断言,如果该bool表达式为True,该程序可以继续向下执行;否则程序会引发AssertionError错误。

此外,断言还可以对逻辑表达式进行判断,实际上断言也相当于一种特殊的分支。

assert断言的执行逻辑是:
if 条件为False :
    程序引发AssertionError错误

4.4 循环结构

循环语句大概包含4个部分:

  • 初始化语句(init_statements):一条或多条语句。
  • 循环条件(test_expression):一个布尔表达式。
  • 循环体(body_statements):满足条件,反复执行的一段代码。
  • 迭代语句(iteration_statements):通常用于控制循环条件中的变量。

4.4.1 while循环

语法格式:

[init_statements]
while test_expression  :
    body_statements
    [iteration_statements]

例如:

#*****************************
#***程序名称:while_test.py
#***程序功能:一个简单的while循环
#***编写日期:2019-2-16		
#*****************************
#循环的初始化条件
count_i = 0
#当count_i小于10时,执行循环体
while count_i < 10:
	print("count:",count_i)
	#迭代语句
	count_i += 1
print("循环结束!")
#下面是一个死循环
count_i2 = 0
while count_i2 < 10:
	print("不停执行的死循环:",count_i2)
	count_i2 -= 1
print("永远无法跳出的循环体")

4.4.2 使用while循环遍历列表和元组(通过列表或元组的索引)

例如:

#*****************************
#***程序名称:while_tuple.py
#***程序功能:使用while循环遍历元组
#***编写日期:2019-2-16		
#*****************************
a_tuple = ('fkit','crazyit','Charlie')
i = 0
#只有i小于len(a_list),继续执行循环体
while i < len(a_tuple):
	print(a_tuple[i])	#根据i来访问元组的元素
	i += 1

又:

#*****************************
#***程序名称:while_list.py
#***程序功能:使用while循环遍历列表
#***编写日期:2019-2-16		
#*****************************
src_list = [12,45,34,13,100,24,56,74,109]
a_list = []	#定义保存整除3的元素
b_list = []	#定义保存除以3余1的元素
c_list = []	#定义保存除以3余2的元素
#只要src_list还有元素,就继续执行循环体
while len(src_list) > 0 :
	#弹出src_list的最后一个元素
	ele = src_list.pop()
	#如果ele % 3不等于0
	if ele % 3 == 0:
		a_list.append(ele)	#添加元素
	elif ele % 3 == 1:
		b_list.append(ele)	#添加元素
	else:
		c_list.append(ele)	#添加元素
print("整除3:",a_list)
print("除以3余1:",b_list)
print("除以3余2:",c_list)

4.4.3 for-in循环

——专门用于遍历范围、列表、元素和字典等可迭代对象包含的元素。

语法格式:

for  变量  in  字符串 |  范围 | 集合等:
    statements

for-in循环可用于遍历任何可迭代对象。所谓可迭代对象,就是指该对象中包含一个_iter_方法,且该方法的返回值对象具有next()方法。

例如:

#*****************************
#***程序名称:for_test.py
#***程序功能:使用for-in循环来计算指定整数的阶乘
#***编写日期:2019-2-16		
#*****************************
s_max = input("请输入您想的计算的阶乘:")
mx = int(s_max)
result = 1
#使用for-in循环遍历范围
for num in range(1,mx + 1):
	result *= num
print(result)

又如:

#完整格式输出九九乘法表
for i in range(1,10):
     for j in range(1,10):
         print("%d*%d=%2d" % (i,j,i*j),end=" ")
     print("")
print('--------------------------------------------')
#左上三角格式输出九九乘法表
for i in range(1,10):
    for j in range(i,10):
        print("%d*%d=%2d" % (i,j,i*j),end=" ")
    print("")
print('--------------------------------------------')

4.4.4  使用for-in循环遍历列表和元组

(1)遍历元组

a_tuple = ('crazyit','fkit','Charlie')
for ele in a_tuple:
	print('当前元素时:',ele)

(2)遍历列表

src_list = [12,45,3.4,13,'a',4,56,'crazyit',109.5]
my_sum = 0
my_count = 0
for ele in src_list:
	#如果该元素是整数或浮点数
	if isinstance(ele,int) or isinstance(ele,float):
		print(ele)
		#累加该元素
		my_sum += ele
		#数值元素的个数加1
		my_count += 1
print('总和:',my_sum)
print('平均数:',my_sum / my_count)

(3)根据索引遍历列表或元组:只要让循环计数器遍历0到列表长度的区间,即可通过该循环计数器来访问列表元素。

a_list = [330,1.4,50,'fkit',-3.5]
#遍历0到len(a_list)的范围
for i in range(0,len(a_list)):
	#根据索引访问列表元素
	print("第%d个元素是%s" % (i,a_list[i]))

4.4.5 使用for-in循环遍历字典

字典包含三个方法:

(1)、items():返回字典中所有key-value对的列表;

(2)、keys():返回字典中所有key的列表;

(3)、values():返回字典中所有value的列表。

所以要遍历字典,可以先调用以上方法之一来获取字典的所有key-value对、所有key、所有value,再进行遍历。

#*****************************
#***程序名称:for_dict.py
#***程序功能:使用for-in循环来遍历字典。
#***编写日期:2019-2-16		
#*****************************
my_dict = {'语文':89,'数学':92,'英语':80}
#通过items()方法遍历所有的key-value对
#由于items方法返回列表元素是key-value对,因此要声明两个变量
#序列解包的应用
for key,value in my_dict.items():
	print('key:',key)
	print('value:',value)
print('-----------------')
#通过keys()方法遍历所有的key
for key in my_dict.keys() :
	print('key:',key)
	#再通过key获取value
	print('value:',my_dict[key])
print('-----------------')
#通过values()方法遍历所有的value
for value in my_dict.values():
	print('value:',value)

又例如:

#*****************************
#***程序名称:count_element.py
#***程序功能:统计列表中各元素出现的次数。
#定义一个字典,以列表的元素为key,该元素出现的次数为value。
#***编写日期:2019-2-16		
#*****************************
src_list = [12,45,3.4,12,'fkit',45,3.4,'fkit',45,3.4]
#定义一个字典statistics
statistics = {}
for ele in src_list:
	#如果字典中包含ele代表的key
	if ele in statistics:
		#将ele元素代表的出现次数加1
		statistics[ele] += 1
	#如果字典中不包含ele代表的key,说明该元素还未出现过
	else:
		#将ele元素代表的出现次数设为1
		statistics[ele] =1
#遍历dict,打印各元素出现的次数
for ele , count in statistics.items():
	print("'%s'出现的次数为:%d" % (ele,count))

4.4.6 循环使用else

Python的循环都可以定义else代码块,当循环条件为False时,程序会执行else代码块。其主要作用是便于生成更优雅的Python代码。

例如:

#*****************************
#***程序名称:while_else.py
#***程序功能:循环使用else代码块
#***编写日期:2019-2-16		
#*****************************
count_i = 0
while count_i < 5 :
	print('count_i小于5:',count_i)
	count_i += 1
else:
	print('count_i大于或等于5:',count_i)

for循环同样可以使用else代码块。

#*****************************
#***程序名称:for_else.py
#***程序功能:循环使用else代码块
#***编写日期:2019-2-16		
#*****************************
a_list = ["锄禾日当午,","汗滴禾下土。","谁知盘中餐?","粒粒皆辛苦!"]
for ele in a_list :
	print('元素:',ele)
else:
	#访问循环计数器的值,依然等于最后一个元素的值
	print('else块:',ele)

4.4.7 嵌套循环

一个循环放在另一个循环体内,就可以形成嵌套循环。既可以是for-in循环嵌套while循环,也可以是while循环嵌套do while循环......

嵌套循环的执行流程图

 

例如:

#*****************************
#***程序名称:nested_loop_test.py
#***程序功能:嵌套循环
#***编写日期:2019-2-17
#*****************************
#外层循环
for i  in range(0,5):
	j = 0
	#内层循环
	while j < 3 :
		print("i的值为:%d,j的值为:%d" % (i,j))
		j += 1

4.4.8 for表达式

for表达式用于利用其他区间、元组、列表等可迭代对象创建新的列表。

语法格式:

[表达式  for  循环计数器   in  可迭代对象]    ——>列表推导式

(表达式  for  循环计数器   in  可迭代对象])   ——>生成器推导式

与普通for循环的区别:

(1)、在for关键字之前定义一个表达式,该表达式通常会包含循环计数器;

(2)、for表达式没有循环体,因此不需要冒号。

for之前的表达式相当于循环体,最终返回的是列表,也被称为列表推导式

如果将for表达式的方括号改为圆括号,for表达式将不再生成列表,而是生成一个生成器(generator),该生成器同样可以使用for循环迭代。(生成器推导式

for表达式可是使用多个循环,就像嵌套循环一样。,而且可以指定if条件。

 

例如:

#*****************************
#***程序名称:for_expr.py
#***程序功能:for表达式——利用其他区间、元组、列表等可迭代对象创建新的列表。
#语法格式:[表达式  for  循环计数器  in  可迭代对象  (if条件)]
#***编写日期:2019-2-17
#*****************************
a_range = range(10)
#对a_range执行for表达式
a_list = [x * x for x in a_range]
#a_list集合包含10个元素
print(a_list)
#可在for表达式后面添加if条件
b_list = [x * x for x in a_range if x % 2 == 0]
#a_list集合包含5个元素
print(b_list)
#下面将for表达式的方括号改为圆括号,for表达式将不再生成列表。
#使用for表达式创建生成器
c_generator = (x * x for x in a_range if x % 2 == 0)
#使用for循环迭代生成器
for i in c_generator:
	print(i,end='\t')
print()
#for表达式可以使用多个循环
d_list = [(x,y) for x in range(5) for y in range(4)]
#d_list列表包含20个元素
print(d_list)
#上面的表达式相当于如下嵌套
dd_list = []
for x in range(5):
	for y in range(4):
		dd_list.append((x,y))
print(dd_list)
#又或者如下
e_list = [[x,y,z] for x in range(5) for y in range(4) for z in range(6)]		#5*4*6=120
#e_list列表包含120个元素
#print(e_list)
#包含多个for循环的for表达式,同样可以指定if条件
src_a = [30,12,66,34,39,78,36,57,121]
src_b = [3,5,7,11]
#只要y能整除x,或将它们配对在一起
result = [(x,y) for x in src_b for y in src_a if y % x == 0]
print(result)

4.4.9 常用工具函数

1、zip()函数:可以把两个列表“压缩”成一个zip对象(可迭代对象),可以使用一个循环并行遍历两个列表。

如果zip()函数要压缩的两个列表长度不相等,那么其将以长度更短的列表为准。

如果zip()函数要压缩N个列表,那么zip()函数返回的可迭代对象的元素就是长度为N的元组。

例如:

#*****************************
#***程序名称:zip_test.py
#***程序功能:zip()函数实现并行遍历的效果
#***编写日期:2019-2-17
#*****************************
books = ['疯狂Kotlin讲义','疯狂Swift讲义','疯狂Python讲义']
prices = [79,69,89]
#使用zip()函数压缩两个列表,从而实现并行遍历
for books,prices in zip(books,prices):
	print("%s的价格是:%5.2f" % (books,prices))

2、reversed()函数:用于反向遍历,可接受各种序列(元组、列表、区间等)参数,返回一个“反序排列”的迭代器,对参数本身不会产生任何影响。

#*****************************
#***程序名称:reversed_test.py
#***程序功能:reversed()函数实现反序排列
#***编写日期:2019-2-17
#*****************************
a = range(10)
a_list = [x for x in reversed(a)]
print(a_list)
b = ['a','fkit',20,3.4,50]
b_list = [x for x in reversed(b)]
print(b_list)
#对str序列字符串进行反序遍历
c = 'Hello,Charlie'
c_list = [x for x in reversed(c)]
print(c_list)

3、sorted()函数:该函数接受一个可迭代对象作为参数,返回一个对元素排序的列表。

该函数可以传入以下两个参数:

(1)reverse参数:设置为True,表示反向排序;

(2)key参数:指定一个函数来生成排序的关键值。(如len函数)

例如:

*****************************
#***程序名称:sorted_test.py
#***程序功能:sorted()函数的用法
#***编写日期:2019-2-17
#*****************************
#sorted()函数接收一个可迭代对象作为参数,返回一个新的、排序好的列表
a = [20,30,-1.2,3.5,90,3.6]
a_list = sorted(a)
print(a_list)
#传入一个reverse参数,设置为True,表示反向排序。
b_list = sorted(a,reverse=True)
print(b_list)
#传入一个key参数,可指定一个函数来生成排序的关键值。
#如传入len函数,根据字符串长度排序。
c = ['fkit','crazyit','Charlie','fox','Emily']
c_list = sorted(c,key=len)
print(c_list)
#对迭代对象按照由小到大的顺序进行遍历
for s in sorted(c,key = len):
	print(s)

 

4.5  控制循环结构

Python可以通过continue、break、return控制循环结构。

4.5.1 使用break结束循环(强行终止循环,跳出循环体,完全中止循环本身)

例如:

#*****************************
#***程序名称:break_test.py
#***程序功能:使用break结束循环
#***编写日期:2019-2-17
#*****************************
#一个简单的for循环
for i in range(0,10):
	print("i的值是:",i)
	if i == 2:
		#执行该语句时将结束循环
		break

对于带else块的for循环,使用break强行终止循环,程序不会执行else块。此外,它只可以结束期所在的循环,不可以结束嵌套循环的外层循环

例如:

#一个简单的for循环
for i in range(0,10):
	print("i的值是:",i)
	if i == 2:
		#执行该语句时将结束循环
		break
	else:
		print('else块:',i)

print('-------------------------')
exit_flag = False
#外层循环
for i in range(0,5):
	#内层循环
	for j in range(0,3):
		print("i的值为:%d,j的值为:%d" % (i,j))
		if j == 1:
			exit_flag = True
			#跳出内层循环
			break
	#如果exit_flag为True,跳出外层循环
	if exit_flag :
		break

4.5.2 使用continue忽略本次循环的剩下语句

例如:

#*****************************
#***程序名称:continue_test.py
#***程序功能:continue语句用法——忽略当次循环的剩下语句,接着开始下一次循环。
#***编写日期:2019-2-18
#*****************************
#一个简单的for循环
for i in range(0,3):
	print("i的值是:",i)
	if i == 1:
		#忽略当次循环的剩下语句
		continue
	print("continue后的输出语句")

4.5.3 使用return结束方法(直接结束整个函数或方法)

return用于从包围它的最直接方法、函数或匿名函数返回。

例如:

def test():
	#外层循环
	for i in range(10):
		for j in range(10):
			print("i的值是:%d,j的值是:%d" % (i,j))
			if j == 1:
				return
			print("return后的输出语句")
test()

 

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值