python第五天(for循环,推导式,函数)

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}

循环代码优化

  1. 尽量减少循环内部不必要的计算
  2. 嵌套循环中尽量减少内层
  3. 局部变量查询较快,尽量使用局部变量

其它优化手段:

  • 连接多个字符尽量使用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()       # 程序执行完,窗口仍然在

函数用法和底层分析

函数的基本概念:

  1. 函数是一个任务或一个功能
  2. 函数是代码复用的通用机制

python的函数功能:

  1. 内置函数:python内部定义的函数,例如list
  2. 标准库函数:import turtle
  3. 第三方函数

函数的定义和调用
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
发布了9 篇原创文章 · 获赞 0 · 访问量 313

猜你喜欢

转载自blog.csdn.net/grace_0604/article/details/104653082