python学习笔记——控制语句

是一种组织方式,将之前学习的“砖块”整合起来。

选择结构if语句

在这里插入图片描述

  1. 单分支举例
a = input("请输入一个数字")
if int(a) < 10:  # 注意想着加上int(),否则数据类型不对会报错
    print(a)

输出

请输入一个数字1
1
  1. 双分支
    三元运算符会更简洁
    在这里插入图片描述

多分支结构每个分支是有逻辑关系的不可以随意改变顺序

在这里插入图片描述

score = int(input("请输入分数:"))
grade = ""
if score < 60:
    grade = "不及格"
elif score < 80:  # 60-80之间
    grade = "及格"
elif score <= 89:
    grade = "良好"
else:
    grade = "优秀"
print("分数是{0},等级是{1}".format(score,grade))

输出

请输入分数:88
分数是88,等级是良好

条件表达式

除了“False、0、0.0、空值None、空序列对象(空的列表、元组、字典、字符串、集合)、空range对象、空迭代对象”的条件表达式的值为False外,其他情况都为True

选择结构嵌套

在这里插入图片描述
举例:

score = int(input("请输入一个分数"))
grade = ""
if score > 100 or score < 0:
    print("输入错误,请输入一个0-100的分数")
else:
    if score >= 90:
        grade = "A"
    elif score >= 80:
        grade = "B"
    elif score >= 70:
        grade = "C"
    elif score >= 60:
        grade = "D"
    else:
        print("did not pass")
    print("分数为{0},等级为{1}".format(score, grade))

或者用更少的代码:

score = int(input("请输入一个分数"))
degree = "ABCDE"
num = 0
if score > 100 or score < 0:
    print("重新输入一个0-100的分数")
else:
    num = score // 10
    if num < 6:
        num = 5

    print("分数是{0},等级是{1}".format(score, degree[9 - num]))

循环结构

while
例一

num = 0
while num <= 10:
    print(num, end="\t")
    num += 1
0 1 2 3 4 5 6 7 8 9 10 

例二 0-100加和

num2 = 0
sum_all = 0

while num2 <= 100:
    sum_all += num2
    num2 += 1  # 注意不要忘记这个以免进入死循环
print(sum_all)

for
for 循环通常用于可迭代对象的遍历。for 循环的语法格式如下:
for 变量 in 可迭代对象: 循环体语句

  • Python包含以下几种可迭代对象:

序列。包含:字符串、列表、元组
字典
迭代器对象(iterator)
生成器函数(generator)
文件对象

for x in "sxt001": 
	print(x)

d = {'name':'wps','age':18,'address':'西三旗 001 号楼'} 
for x in d: #遍历字典所有的key 
	print(x)
for x in d.keys():#遍历字典所有的key (括号不要忘加)
	print(x)
for x in d.values():#遍历字典所有的value 
	print(x)
for x in d.items():#遍历字典所有的"键值对" 
	print(x)

range对象

range 对象是一个迭代器对象,用来产生指定范围的数字序列。格式为:
range(start, end [,step])
生成的数值序列从start 开始到 end结束(不包含 end)。若没有填写start,则默认从 0 开始。step是可选的步长,默认为 1。
**例:**计算1-100的奇数偶数和

sum_all = 0
sum_odd = 0
sum_even = 0
for x in range(101):
    sum_all += x
    if x % 2 == 1:
        sum_odd += x
    else:
        sum_even += x
print("1-100总和为{0},奇数和为{1},偶数和为{2}".format(sum_all, sum_odd, sum_even))
1-100总和为5050,奇数和为2500,偶数和为2550

嵌套循环

举例:
1.
在这里插入图片描述

tb = []
r1 = dict(name='高小一',age=18, salary=30000, city='北京')
r2 = dict(name='高小二',age=19, salary=20000, city='上海')
r3 = dict(name='高小五',age=20, salary=10000, city='深圳')
tb = [r1, r2, r3]

for x in tb:
    if x.get("salary")>15000:
        print(x)
{'name': '高小一', 'age': 18, 'salary': 30000, 'city': '北京'}
{'name': '高小二', 'age': 19, 'salary': 20000, 'city': '上海'}
#利用嵌套循环打印九九乘法表 
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()
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

break语句

break语句可用于 while 和for 循环,用来结束整个循环。当有嵌套循环时,break 语句只 能跳出最近一层的循环。

while True:
    a = input("请输入一个字符(输入Q或者q时退出):")
    if a =="q" or a == "Q":
        print("ending")
        break
    else:
        print(a)
请输入一个字符(输入Q或者q时退出):d
d
请输入一个字符(输入Q或者q时退出):q
ending

continue语句

continue 语句用于结束本次循环,继续下一次。多个循环嵌套时,continue 也是应用于最 近的一层循环。
举例:
在这里插入图片描述

empNum = 0
salarySum = 0
salarys = []  # 用列表这样的可变序列表示,因为要连续录入
while True:
    s = input("请输入员工工资(按Q或q结束)")

    if s.upper() == 'Q':
        print("录入完成,退出")
        break
    if float(s) < 0:
        continue
    empNum += 1
    salarys.append(float(s))
    salarySum += float(s)

print("员工数{0}".format(empNum))
print("录入薪资{0}".format(salarys))
print("平均薪资{0}".format(salarySum/empNum))
请输入员工工资(按Q或q结束)10000
请输入员工工资(按Q或q结束)20000
请输入员工工资(按Q或q结束)30000
请输入员工工资(按Q或q结束)-1000
请输入员工工资(按Q或q结束)40000
请输入员工工资(按Q或q结束)q
录入完成,退出
员工数4
录入薪资[10000.0, 20000.0, 30000.0, 40000.0]
平均薪资25000.0

else语句

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

while 条件表达式: 循环体
else: 语句块

或者:

for 变量 in 可迭代对象: 循环体
else: 语句块
举例:
在这里插入图片描述

salarySum = 0
salarys = []
for i in range(4):
    s = input("请输入一共4名员工的薪资(按Q或q中途结束)")

    if s.upper() == 'Q':  # 将字符串中的小写字母转为大写字母
        print("录入完成,退出")
        break
    if float(s) < 0:
        continue
    salarys.append(float(s))
    salarySum += float(s)


else:
    print("四名员工薪资录入完毕")

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

循环代码优化

虽然计算机越来越快,空间也越来越大,仍然要在性能问题上“斤斤计较”。编写循环时,遵守下面三个原则可以大大提高运行效率,避免不必要的低效计算:

  1. 尽量减少循环内部不必要的计算
  2. 嵌套循环中,尽量减少内层循环的计算,尽可能向外提。
  3. 局部变量查询较快,尽量使用局部变量
# 循 环 代 码 优 化 测 试 
import time

start = time.time() 
for i in range(1000): 
	result = [] 
	for m in range(10000): 
		result.append(i*1000+m*100)
end = time.time() 
print("耗时:{0}".format((end-start)))

start2 = time.time() 
for i in range(1000): 
	result = [] 
	c = i*1000 
	for m in range(10000): 
		result.append(c+m*100)
end2 = time.time() 
print("耗时:{0}".format((end2-start2)))

其他优化手段

连接多个字符串,使用 join()而不使用+
列表进行元素插入和删除,尽量在列表尾部操作

使用zip()并行迭代

  1. zip()
    函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,这样做的好处是节约了不少的内存;
  2. 如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同。
zip(*iterable) -> zip object #返回一个zip对象

通过 zip()函数对多个序列进行并行迭代,zip()函数在最短序列“用完”时就会停止。

names = ("王小一", "王小二", "王小三", "王小四")
ages = (18, 16, 20, 25)
jobs = ("老师", "程序员", "公务员")
for name, age, job in zip(names, ages, jobs):
    print("{0}--{1}--{2}".format(name, age, job))

# 或者不用zip()
for i in range(3):
    print("{0}--{1}--{2}".format(names[i],ages[i],jobs[i]))
王小一--18--老师
王小二--16--程序员
王小三--20--公务员

猜你喜欢

转载自blog.csdn.net/weixin_48929099/article/details/107713499