第 4 章 控制语句

一、选择结构

简单的 if 语句 示例代码:

# 单分支
age = 10
if age == 0:
    print('True')

# 条件表达式
if 0 < age < 10:
    print('boy')

# 双分支
if age > 18:
    print('young')
else:
    print('boy')

# 三元运算符
# 格式: 条件为真时的值 if (条件表达式) else 条件为假时的值
print(age if age > 18 else 'boy')

# 多分支选择结构 样式如下:
#   if 条件表达式
#       语句1/语句块1
#   elif 条件表达式2:
#       语句2/语句块2
#   ...
#   elif 条件表达式n:
#       语句n/语句块n
#   [ else:
#       语句n+1/语句块n+1 ]

score = 78
grade = ''
if (score < 60):
    grade = 'D'
elif (60 <= score < 70):
    grade = 'C'
elif (70 <= score <90):
    grade = 'B'
elif (90 <= score):
    grade = 'A'
else:
    grade = 'AAA'
print('grade:' + grade)

# 选择结构嵌套
sex = input('请输入性别(男/女):')
if '男' == sex or '女' == sex:
    if '男' == sex:
        print('性别:' + sex)
    elif '女' == sex:
        print('性别:' + sex)
else:
    sex = input('输入有误,请重新输入性别(男/女)')
    print('你输入的值:' + sex)
=================运算结果=======================================
boy
boy
grade:B
请输入性别(男/女):女
性别:女
=================运算结果=======================================

简单的循环结构

	循环结构用来重复执行一条或多条语句。表达这样的逻辑:如果符合条件,则反复执行循环体里的语句。
在每次执行完后都会判断一次条件是否为 True,如果为 True 则重复执行循环体里的语句。图示如下:

循环示意图

	循环体里面的语句至少应该包含改变条件表达式的语句,以使循环趋于结束;
否 则,就会变成一个死循环。

示例代码

# while 循环
num = 0
sum = 0
while num <= 50:
    sum += num
    num += 1
print('0 到 50之和sum:' + str(sum))

# for 循环和可迭代对象遍历
for x in range(3):
    print('res:' + str(x * 3))

# Python 包含以下几种可迭代对象:
# 1. 序列。包含:字符串、列表、元组
# 2. 字典
# 3. 迭代器对象(iterator)
# 4. 生成器函数(generator)
# 5. 文件对象

# 嵌套循环:一个循环体内可以嵌入另一个循环,一般称为“嵌套循环”,或者“多重循环”。
for x in range(4):
    for y in range(3):
        print(x, end='\t')
    print()  # 用于换行

# 打印九九乘法表
for m in range(1, 10):
    for n in range(1, m + 1):
        print('{0} * {1} = {2}'.format(m, n, m * n), end='\t')
    print()  # 换行

# break 语句
# break 语句可用于 while 和 for 循环,用来结束整个循环。
# 当有嵌套循环时,break 语句只 能跳出最近一层的循环。
a = int(input('请输入1-20之间的数字:'))
while True:
    if a == 100:
        print('循环结束,退出!!!')
        break
    else:
        a += 1

# continue 语句
# continue 语句用于结束本次循环,继续下一次。
# 多个循环嵌套时,continue 也是应用于最 近的一层循环。
empNum = 0
salarySum = 0
salarys = []
while True:
    money = input('请输入员工的薪资(按Q或去退出):')
    if 'Q' == money.upper():
        print('录入完成!!!')
        break
    if float(money) < 0:
        continue
    empNum += 1
    salarys.append(money)
    salarySum += float(money)
print('员工数:{0} 人'.format(empNum))
print('录入薪资:', salarys)
print('平均薪资{0}'.format(salarySum / empNum))

# 循环里的else语句
# while、for 循环可以附带一个 else 语句(可选)。
# 如果 for、while 语句没有被 break 语句 结束,则会执行 else 子句,否则不执行。
# 语法格式如下:
#   while 条件表达式:
#       循环体
#   else:语句块

#       或者:

#   for 变量 in 可迭代对象:
#       循环体
#   else:
#       语句块

# 员工一共 4 人。录入这 4 位员工的薪资。
# 全部录入后,打印提示“您已经全部录 入 4 名员工的薪资”。
# 最后,打印输出录入的薪资和平均薪资
salarySum = 0
salarys = []
for i in range(4):
    money = input('请输入一共 4 名员工的薪资(按 Q 或 q 中途结束):')
    if 'Q' == money.upper():
        print('录入完成,退出!!!')
        break
    if float(money) < 0:
        continue
    salarys.append(float(money))
    salarySum += float(money)
else:
    print("您已经全部录入 4 名员工的薪资")

print('录入薪资:', salarys)
print('平均薪资{0}'.format(salarySum / 4))

===================运行结果==============================
050之和sum1275
res:0
res:3
res:6
0	0	0	
1	1	1	
2	2	2	
3	3	3	
1 * 1 = 1	
2 * 1 = 2	2 * 2 = 4	
3 * 1 = 3	3 * 2 = 6	3 * 3 = 9	
4 * 1 = 4	4 * 2 = 8	4 * 3 = 12	4 * 4 = 16	
5 * 1 = 5	5 * 2 = 10	5 * 3 = 15	5 * 4 = 20	5 * 5 = 25	
6 * 1 = 6	6 * 2 = 12	6 * 3 = 18	6 * 4 = 24	6 * 5 = 30	6 * 6 = 36	
7 * 1 = 7	7 * 2 = 14	7 * 3 = 21	7 * 4 = 28	7 * 5 = 35	7 * 6 = 42	7 * 7 = 49	
8 * 1 = 8	8 * 2 = 16	8 * 3 = 24	8 * 4 = 32	8 * 5 = 40	8 * 6 = 48	8 * 7 = 56	8 * 8 = 64	
9 * 1 = 9	9 * 2 = 18	9 * 3 = 27	9 * 4 = 36	9 * 5 = 45	9 * 6 = 54	9 * 7 = 63	9 * 8 = 72	9 * 9 = 81	
请输入1-20之间的数字:11
循环结束,退出!!!
请输入员工的薪资(按Q或去退出):12343.44
请输入员工的薪资(按Q或去退出):23452.55
请输入员工的薪资(按Q或去退出):452522.32
请输入员工的薪资(按Q或去退出):54632.55
请输入员工的薪资(按Q或去退出):Q
录入完成!!!
员工数:4 人
录入薪资: ['12343.44', '23452.55', '452522.32', '54632.55']
平均薪资135737.715
请输入一共 4 名员工的薪资(按 Q 或 q 中途结束):23432.55
请输入一共 4 名员工的薪资(按 Q 或 q 中途结束):35453.66
请输入一共 4 名员工的薪资(按 Q 或 q 中途结束):34353.74
请输入一共 4 名员工的薪资(按 Q 或 q 中途结束):56436.90
您已经全部录入 4 名员工的薪资
录入薪资: [23432.55, 35453.66, 34353.74, 56436.9]
平均薪资37419.2125
===================运行结果==============================

循环代码优化

虽然计算机越来越快,空间也越来越大,我们仍然要在性能问题上“斤斤计较”。
编写循环时,遵守下面三个原则可以大大提高运行效率,避免不必要的低效计算: 
1. 尽量减少循环内部不必要的计算 
2. 嵌套循环中,尽量减少内层循环的计算,尽可能向外提。 
3. 局部变量查询较快,尽量使用局部变量
		******其他优化手段****** 
4. 连接多个字符串,使用 join()而不使用+ 
5. 列表进行元素插入和删除,尽量在列表尾部操作

使用 zip()并行迭代

我们可以通过 zip()函数对多个序列进行并行迭代,zip()函数在最短序列“用完”时就会停止。
names = ("jack","marry","tony","rose")
ages = (18,16,20,25)
jobs = ("老师","IT","公务员")

for name, age, job in zip(names,ages,jobs):
    print('{0} - {1} - {2}'.format(name, age, job))
===================运行结果==============================
jack - 18 - 老师
marry - 16 - IT
tony - 20 - 公务员
===================运行结果==============================
# 很明显zip()函数在最短序列“用完”时就会停止

推导式创建序列

	推导式是从一个或者多个迭代器快速创建序列的一种方法。它可以将循环和条件判断结合, 从而避免
冗长的代码。推导式是典型的 Python 风格,会使用它代表你已经超过 Python 初 学者的水平。

列表推导式

列表推导式生成列表对象,语法如下: 
[表达式 for item in 可迭代对象 ]   或者:
{表达式 for item in 可迭代对象 if 条件判断} 
	>>> [x for x in range(1,5)] 
	[1, 2, 3, 4] 
	>>> [x*2 for x in range(1,5)] 
	[2, 4, 6, 8]
	>>> [x*2 for x in range(1,20) if x%5==0 ] 
	[10, 20, 30] 
	>>> [a for a in "abcdefg"] 
	['a', 'b', 'c', 'd', 'e', 'f', 'g']

字典推导式

字典的推导式生成字典对象,格式如下: 
{key_expression : value_expression for 表达式 in 可迭代对象} 
类似于列表推导式,字典推导也可以增加 if 条件判断、多个 for 循环。
# 统计文本中字符出现的次数:
>>> text = 'you are very beautiful,i love you!'
>>> char_count = {c:text.count(c) for c in text}
>>> char_count
{'y': 3, 'o': 3, 'u': 4, ' ': 5, 'a': 2, 'r': 2, 'e': 4, 
'v': 2, 'b': 1, 't': 1, 'i': 2, 'f': 1, 'l': 2, ',': 1, '!': 1}

集合推导式

集合推导式生成集合,和列表推导式的语法格式类似: 
{表达式 for item in 可迭代对象 } 或者:
{表达式 for item in 可迭代对象 if 条件判断} 
		>>> {x for x in range(1,100) if x%9==0} 
		{99, 36, 72, 9, 45, 81, 18, 54, 90, 27, 63}

生成器推导式(生成元组)

# 元组推导式有没有呢?接下来就测试
>>> (x for x in range(1,100) if x%9==0)
<generator object <genexpr> at 0x00000265AE0DD9E8>
# 我们发现提示的是“一个生成器对象”。显然,元组是没有推导式的。
# 一个生成器只能运行一次。第一次迭代可以得到数据,第二次迭代发现数据已经没有了。
		res = (x for x in range(1,100) if x%9==0)
		print(type(res))
		for x in res:
    		print(x, end=' ')
		print('\n==========')
		for x in res:
    		print(x, end='end')
		print('==========')
===================运行结果==============================
	<class 'generator'>
	9 18 27 36 45 54 63 72 81 90 99 
	==========
	==========
===================运行结果==============================
# 很明显第二个for循环没有输出,所以一个生成器只能运行一次。

学习来自:北京尚学堂高琪老师 Python 400集

发布了20 篇原创文章 · 获赞 6 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/XuanAlex/article/details/104563734