上期我们讲到了循环,这期我们还是继续来了解一下循环有关的知识
嵌套循环
实例:
# 嵌套循环
import time
for x in range(5):
for y in range(5):
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() # 换行
# 使用列表和字典存储表格的数据
tb = []
r1 = dict(name="小明",age=18,salary=30000,city="北京")
r2 = dict(name="小红",age=19,salary=10000,city="杭州")
r3 = dict(name="小刚",age=20,salary=9000,city="上海")
tb = [r1, r2, r3]
for x in tb:
if x.get("salary")>15000:
print(x)
break语句
实例:
# 操作break 语句
while True:
a = input("请输入一个字符")
if a.upper() == "Q":
print("循环结束")
break
else:
print(a)
conyinue语句
实例:
# continue 语句
empNum = 0
salaryNum = 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))
salaryNum += float(s)
print("员工数{0}".format(empNum))
print("录入薪资",salarys)
print("平均薪资{0}".format(salaryNum/empNum))
else语句:
实例:
# 测试循环中的else语句 (循环被中断不执行,正常结束执行)
for i in range(4):
s = input("请输入员工的薪资(按Q或q结束)")
if s.upper() == "Q":
print("录入完成,退出")
break
if float(s) < 0:
continue
salarys.append(float(s))
salaryNum += float(s)
else:
print("您已经全部录入4名员工的薪资")
print("录入薪资",salarys)
print("平均薪资{0}".format(salaryNum/4))
循环代码优化
实例:
# 循环代码优化测试
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))
其他的一些优化手段
使用zip()并行迭代
实例:
for i in [1, 2, 3]:
print(i)
names = ("aa", "bb", "cc", "dd")
ages = (18, 19, 30, 50)
jobs = ("老师", "程序员", "公务员")
for name, age, job in zip(names, ages, jobs):
print("{0}--{1}--{2}".format(name,age,job))
# 或者使用 一样效果
for i in range(3):
print("{0}--{1}--{2}".format(names[i],ages[i],jobs[i]))
推导式创建序列
列表推导式
实例:
# 列表推导式
y = [x*2 for x in range(1, 5) ] # 包头不包尾
y = [x*2 for x in range(50) if x % 5 == 0] # 加if判断
y = [(a, b) for a in range(5) for b in range(5)] # 双循环给元祖赋值
print(y)
# 列表不使用推导式
y = []
for x in range(1, 5):
y.append(x * 2)
print(y)
字典推导式
实例:
y = "abbcccddddeeeee"
x = {c:y.count(c) for c in y} # 统计字符出现的次数
print(x)
集合推导式:
实例:
# 集合推导式 集合输出没有顺序
b = {x for x in range(1,100) if x % 9 == 0}
print(b)
生成器推导式(生成元祖)
实例:
# 生成器推导式(生成元祖)
gnt = (x for x in range(4))
# print(tuple(gnt)) # 转换成元祖
for x in gnt: # gnt是生成器对象,生成器是可迭代的对象,只能使用一次
print(x,end=",")
函数简介
实例:
# 可以反复调用 函数也是对象(函数对象)
def test01():
print("*"*10)
print("@"*10)
test01() # 调用函数
print(id(test01))
print(type(test01))
print(test01())
形参和实参
实例:
# 测试形参、实参的基本用法(形参用于定义, 实参用于调用)
# 参数与传入的参数需一一对应
def printMax(a, b):
'''
这个就是函数的注释
:param a:
:param b:
:return:
'''
if a>b:
print(a, "最大值")
else:
print(b, "最大值")
print(printMax(3, 2)) # 调用函数
help(printMax.__doc__) # 打印函数的注释
好啦我们下期见