流程控制
python提供了分支结构和循环结构,if 分支机构,while、for-in循环,还有break和Contiue来控制循环结构
4.1 if 分支结构
s_age = input("请输入您的年龄:")
age = int(s_age)
if age > 20 :
# 只有当age > 20时,下面用整体缩进的代码块才会执行
# 整体缩进的语句是一个整体,要么一起执行,要么一起不执行
print("年龄已经大于20岁了")
print("20岁以上的人应该学会承担责任...")
运行结果:
请输入您的年龄:21
年龄已经大于20岁了
20岁以上的人应该学会承担责任...
4.1.1 if 条件的类型
# 定义空字符串
s = ""
if s :
print('s不是空字符串')
else:
print('s是空字符串')
# 定义空列表
my_list = []
if my_list:
print('my_list不是空列表')
else:
print('my_list是空列表')
# 定义空字典
my_dict = {}
if my_dict:
print('my_dict不是空字典')
else:
print('my_dict是空字典')
各种空类型python都会当做False处理
4.1.2 pass 语句
s = input("请输入一个整数: ")
s = int(s)
if s > 5:
print("大于5")
elif s < 5:
# 空语句,相当于占位符
pass
else:
print("等于5")
当程序暂时不想处理时,使用一个占位符pass 来占位
4.2循环结构
循环语句包括:初始化语句、循环条件、循环体、迭代语句
4.2.1 while 循环
# 循环的初始化条件
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.2.2 使用while循环遍历列表和元组
a_tuple = ('fkit', 'crazyit', 'Charli')
i = 0
# 只有i小于len(a_list),继续执行循环体
while i < len(a_tuple):
print(a_tuple[i]) # 根据i来访问元组的元素
i += 1
运行结果
fkit
crazyit
Charli
小程序
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(能被3整除)
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.2.3 for-in循环
用于遍历范围、列表、元素和字典等可迭代对象包含的元素
s_max = input("请输入您想计算的阶乘:")
mx = int(s_max)
result = 1
# 使用for-in循环遍历范围
for num in range(1, mx + 1):
result *= num
print(result)
4.2.4 使用for-in循环遍历和元组
循环遍历元组
a_tuple = ('crazyit', 'fkit', 'Charlie')
for ele in a_tuple:
print('当前元素是:', ele)
计算列表中所有数值元素的总和、平均值
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)
上面使用了isinstance()函数,判断某个变量是否为指定的类型
for-in也可以根据索引来遍历列表或元组
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.2.5使用for-in循环遍历字典
- items():返回字典中所有key-value对的列表
- keys(): 返回字典中所有key的列表
- values(): 返回字典中所有的value的列表
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)
统计列表中各元素的出现次数
src_list = [12, 45, 3.4, 12, 'fkit', 45, 3.4, 'fkit', 45, 3.4]
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.2.6 for表达式
for表达式用于利于其他区间、元组、列表等元素等可迭代对象创建新的列表。语法格式如下:
【表达式 for 循环计数器 in 可迭代对象】
a_range = range(10)
# 对a_range执行for表达式
a_list = [x * x for x in a_range]
# a_list集合包含10个元素
print(a_list)
b_list = [x * x for x in a_range if x % 2 == 0]
# a_list集合包含5个元素
print(b_list)
# 使用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()
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)]
# 3_list列表包含120个元素
print(e_list)
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.2.7常用工具函数
使用zip函数可以把两个列表“压缩”成一个zip对象(可迭代对象),这样就可以使用一个循环并行遍历两个列表。
books = ['疯狂Kotlin讲义', '疯狂Swift讲义', '疯狂Python讲义']
prices = [79, 69, 89]
# 使用zip()函数压缩两个列表,从而实现并行遍历
for book, price in zip(books, prices):
print("%s的价格是: %5.2f" % (book, price))
使用reversed()函数接收各种序列(元组、列表、区间等)参数,然后返回一个“反序排列”的迭代器
>>> a=range(10)
>>> [x for x in reversed(a)]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
使用sorted()函数 接收一个可迭代对象作为参数,返回一个对元素排序的列表。
>>> a=[321,43,321,3,431,3214,54]
>>> sorted(a)
[3, 43, 54, 321, 321, 431, 3214]
>>> sorted(a,reverse=True)
[3214, 431, 321, 321, 54, 43, 3]
>>> b=['dsa','dafdg','gfdhadsa','gfdhgsa']
>>> sorted(b,key=len)
['dsa', 'dafdg', 'gfdhgsa', 'gfdhadsa']
4.3控制循环结构
python语言没有提供goto语句来控制程序的跳转,这样虽然提供了程序的可读性,但灵活性降低,python提供看continue和break来控制循环结构
4.3.1使用break结束循环
break用于完全结束一个循环,跳出循环体。
# 一个简单的for循环
for i in range(0, 10) :
print("i的值是: ", i)
if i == 2 :
# 执行该语句时将结束循环
break
# 一个简单的for循环
for i in range(0, 10) :
print("i的值是: ", i)
if i == 2 :
# 执行该语句时将结束循环
break
else:
print('else块: ', i)
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.3.2使用continue忽略本次循环剩下的语句
continue的功能和break类似,continue只是忽略当次循环剩下的语句,接着开始下次循环,并不会终止循环
# 一个简单的for循环
for i in range(0, 3 ) :
print("i的值是: ", i)
if i == 1 :
# 忽略本次循环的剩下语句
continue
print("continue后的输出语句")