目录
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结束方法(直接结束整个函数或方法)
——程序从上到下一行行地执行,中间没有任何判断和跳转。
Python的if语句有三种形式:
(1)、
if expression :
statements...
(2)、
if expression:
else :
statements...
(3)、
if expression :
statements...
elif expression :
statements...
... //可以有零条elif语句
else :
statements...
if条件后的条件执行体一定要缩进,只有缩进后的代码才能算条件执行体。
Python通常建议缩进4个空格。
位于同一代码块中的所有语句必须保持相同的缩进,既不能多,也不能少。
可以是任意类型。
在使用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("青年人")
相当于其他语言中的三目运算符。(略)
有时候程序需要占一个位,放一条语句,但又不希望这条语句做任何事情,此时就可以用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")
——和if分支语句有点类似,用于对一个bool表达式进行断言,如果该bool表达式为True,该程序可以继续向下执行;否则程序会引发AssertionError错误。
此外,断言还可以对逻辑表达式进行判断,实际上断言也相当于一种特殊的分支。
assert断言的执行逻辑是:
if 条件为False :
程序引发AssertionError错误
循环语句大概包含4个部分:
语法格式:
[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("永远无法跳出的循环体")
例如:
#*****************************
#***程序名称: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)
——专门用于遍历范围、列表、元素和字典等可迭代对象包含的元素。
语法格式:
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('--------------------------------------------')
(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]))
字典包含三个方法:
(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))
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)
一个循环放在另一个循环体内,就可以形成嵌套循环。既可以是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
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)
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)
Python可以通过continue、break、return控制循环结构。
例如:
#*****************************
#***程序名称: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
例如:
#*****************************
#***程序名称:continue_test.py
#***程序功能:continue语句用法——忽略当次循环的剩下语句,接着开始下一次循环。
#***编写日期:2019-2-18
#*****************************
#一个简单的for循环
for i in range(0,3):
print("i的值是:",i)
if i == 1:
#忽略当次循环的剩下语句
continue
print("continue后的输出语句")
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()