for循环剩余部分
for 循环和可迭代对象遍历:
for 变量 in 可迭代对象:
循环体语句
for x in (20, 30, 40):
a = x*3
print(a) # print要缩进才能显示三个值,不缩进只能显示最后一个值*3
for y in ("abcdefg"): #或者不加()也可以
print(y)
d = {"name":'grace',"age":18, "job":"student"}
for i in d:
print(i)
for i in d.items():
print(i)
range对象
range对象是一个迭代器对象,用来产生指定范围的数字序列。格式为:
[start, end [,step]]
若没有start,则默认从0开始
如果要在循环中依次打出结果那print需要缩进,如果通过循环求和,那么print不需要缩进
sum_all = 0
for i in range(0,101):
sum_all+= i
print(sum_all)
sum_odd = 0
for i in range(1,101, 2):
sum_odd += i
print(sum_odd)
# 另一种方法
sum_odd = 0
sum_even = 0
for i in range(0, 101):
if i % 2 == 0:
sum_even += i
else:
sum_odd += i
print("奇数和为{0},偶数和为{1}".format(sum_odd, sum_even))
嵌套循环
for a in range(5):
for b in range(5):
print(a, end="\t")
print()
for a in range(1, 10):
for b in range(1, 10):
c = a*b
print("{0}*{1}={2}".format(a, b, c),end="\t")
print()
# 修改过的九九乘法表
for a in range(1, 10):
for b in range(1, a+1): # 注意这里的范围是由a的大小决定的,并且是到a+1
c = a * b
print("{0}*{1}={2}".format(a, b, c), end="\t")
print()
练习:表格相关
r1 = {"name":"高小一","salary":18000, "location":"北京"}
r2 = {"name":"高小二","salary":13000, "location":"上海"}
r3 = {"name":"高小五","salary":19000, "location":"深圳"}
tb = [r1,r2,r3]
# 两种打印表格的方式
for x in tb: # 表示表格中的每一行
print(x)
for y in range(len(tb)):
print(tb[y].get("name"),tb[y].get("salary"),tb[y].get("location"),)
# 两种表示薪资大于15000的方式
for y in range(len(tb)):
if tb[y].get("salary")> 15000:
print(tb[y].get("name"),tb[y].get("salary"),tb[y].get("location"),)
for i in tb:
if i.get("salary")>15000: # 取对应的键值
print(i)
print(i.get("salary"))
break语句:
用于for和while循环语句,用来结束整个循环。当有嵌套语句时,break跳出最近的一层循环。
while True:
x = input("请输入不为q的字符")
if x == "q":
print("错误")
break
else:
print(x)
continue语句:
用于结束本次循环,继续下一次。多次循环嵌套时,continue也用于最近的一次循环。
while True:
score = float(input('please input your score:'))
grade = "ABCDE"
num = 0
if score > 100 or score < 0:
print("wrong number please input your grade again(must in the range 0-100)")
continue # continue要缩进
else:
num = score // 10
if num < 6:
num = 5
elif num == 10:
num = 9 # 考虑100的特殊情况
print("your score is {0},your grade is {1}".format(score, grade[round(9 - num)])) # print也要缩进,使得它属于else
break # break也要缩进
i = 0
sum_sal = 0
salaries = []
while True:
s = input("请输入薪资(输入q表示结束):")
if s == "q":
break
if float(s) < 0:
continue
else:
i += 1
sum_sal += float(s)
salaries.append(s)
print("人数共有{0}".format(i))
print("录入薪资为:",salaries) # 用逗号连接打印的内容
print("薪资总和为{0}".format(sum_sal))
print("平均薪资为{0}".format(sum_sal/i))
# 一定要定义为0
else语句:
while, for循环可附带else语句,如果循环没有被break结束,则会执行else语句,否则不执行。
sum_sal = 0
salaries = []
a = 0
for i in range(4):
s = input("请输入四名员工薪资(输入q表示结束):")
if s == "q":
print("已完成录入")
break
if float(s) < 0:
continue
a += 1
sum_sal += float(s)
salaries.append(s)
# 以上语句块属于for循环
else: # 和for一样的位置,不需要缩进
print("已完成四名员工薪资录入")
print("人数共有{0}".format(a))
print("录入薪资为:",salaries) # 用逗号连接打印的内容
print("薪资总和为{0}".format(sum_sal))
print("平均薪资为{0}".format(sum_sal/i))
# 一定要定义为{0}
循环代码优化
- 尽量减少循环内部不必要的计算
- 嵌套循环中尽量减少内层
- 局部变量查询较快,尽量使用局部变量
其它优化手段:
- 连接多个字符尽量使用join()而不使用+
- 列表进行元素插入和删除,尽量在列表尾部进行
zip()
names = ("高小一", "高小二", "高小五")
ages = (18, 16, 15)
jobs = ("teacher", 'programmer', "prosecutor")
# zip方法
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]))
推导式创建序列
推导式是从一个或多个迭代器创建序列的一种方法,它可以将条件和判断相结合,从而避免冗长的代码。
列表推导式
列表推导式生成列表对象,语法如下:
[表达式 for item in 可迭代对象]
y = [x*2 for x in range(1, 100) if x % 5 == 0]
print(y)
a = [(b,c) for b in range(1, 10)for c in range(1, 10) if b+c == 10]
print(a)
字典推导式
字典推导式格式如下:
{key_expression:value_expression for 表达式 in 可迭代对象 }
j = "i love you, i love sxt"
i = {e:j.count(e)for e in j} # e代表每个字符,j.count(e)用来表示每个字符出现的次数
print(i)
j = "i love you, i love sxt"
i = {e:j.find(e)for e in j} # e代表每个字符,j.count(e)用来表示每个字符出现的位置
print(i)
集合推导式:
y = {x*2 for x in range(1, 100) if x % 5 == 0}
print(y)
生成器推导式(生成元组)
gnt = (x for x in range(8))
for x in gnt: # gnt是生成器对象,生成器是可迭代对象,只能使用一次
print(x,end=" ")
print()
print(tuple(gnt))
练习:
import turtle
t = turtle.Pen() # 用t代表turtle
t.width(5)
my_color = ("red", "blue", "green", "pink", "yellow","purple")
for i in range(30):
t.color(my_color[i%6-1])
t.circle(i*30)
t.penup()
t.goto(0, -i*30)
t.pendown()
turtle.done() # 程序执行完,窗口仍然在
函数用法和底层分析
函数的基本概念:
- 函数是一个任务或一个功能
- 函数是代码复用的通用机制
python的函数功能:
- 内置函数:python内部定义的函数,例如list
- 标准库函数:import turtle
- 第三方函数
函数的定义和调用
python中,定义函数的语法如下:
def 函数名 ([参数列表]):
文档字符串
函数体/若干语句
def aabbcc():
print("*"*10)
print("#"*10)
aabbcc()
要点:
- python执行define时,会创建一个函数对象,并绑定到函数名变量上。
- 无参数,也必须保留空的圆括号
- 调用之前,必须先定义函数
- return返回值
- 参数列表
形参与实参
形式参数在定义函数时使用
在调用函数时,传递的函数是“实际参数”
文档字符串(函数的注释):三个单引号
我们调用help(函数名.doc)
def printMax(a,b):
'''用于比较两个数的大小,并打印最大值'''
if a>b:
print(a,"较大值")
else:
print(b,'较大值')
printMax(10,20)
help(printMax.__doc__)
返回值
返回值并且结束语句
def number(x,y,z):
return[x**2, y**2, z**2]
print(number(2,3,4)) #使用返回值时,要用print才能打印,而不是直接输入函数
def number(x,y,z):
return
print("a")
print(number(2,3,4)) #返回None