深度学习DAY5 Python入门

for循环和可迭代对象遍历

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

for 变量 in 可迭代对象:

循环体语句
[操作]遍历一个元组或列表

for x in (20,30,40):
    print(x*3)

[操作]遍历字符串中的字符

for y in "abcd":
    print(y)

[操作]遍历字典

a={'姓名':'rx',"年龄":18,"job":"student"}
for x in a:#遍历字典所有key
    print(x)

a={'姓名':'rx',"年龄":18,"job":"student"}
for x in a.keys():#遍历字典所有key
    print(x)
a={'姓名':'rx',"年龄":18,"job":"student"}
for x in a.items():#遍历字典所有键值对
    print(x)

range对象

range对象是一个迭代器对象,用来生产指定范围的数字序列,格式为:

range(start,end,[step])

生成的数值序列从start开始到end结束(不包含end),若没有填写start,则默认从0开始。step是可选的步长,默认为1.
如下是几种典型示例:
for i in range(10)   产生序列0 1 2 3 4 5 6 7 8 9
for i in range(3,10)    产生序列3 4 5 6 7 8 9
for i in range(3,10,2)   产生序列 3 5 7 9
[操作]利用for循环,计算1-100之间数字的累加和,计算1-100之间计数的累加和

sum=0
for x in range(1,101):
    sum+=x
print(sum)

运算结果5050

sum=0
for x in range(1,101,2):
    sum+=x
print(sum)

运算结果2500
(下面这个程序是老师写的,我要学人家用.format)

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

运行结果:
在这里插入图片描述

嵌套循环

一给循环可以嵌入另一个循环,一般称为其那套循环。
[操作]打印如下图案
在这里插入图片描述

for x in range(5):
    for y in range(5):
       print(x,end="\t")
    print("\n")

[练习]九九乘法表

for m in range(1,10):
    for n in range(1,10):
       if m>=n:
          print("{0}*{1}={2}".format(m,n,m*n),end="\t")
    print("")

运行结果:
在这里插入图片描述
[练习]用字典和表格存储下列信息,并打印工资高于3500的数据

姓名 年龄 薪资 城市
zrx 18 3000 北京
hzl 20 5000 上海
lemon 22 4000 广州
r1={"姓名":"rx","年龄":18,"salary":3000,"city":"北京"}
r2={"姓名":"zl","年龄":20,"salary":5000,"city":"上海"}
r3={"姓名":"lemon","年龄":22,"salary":4000,"city":"广州"}
a=[r1,r2,r3]
for x in a:
    if x.get("salary")>3500:
     print(x)

运行结果:在这里插入图片描述

break语句

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

continue语句

continue语句用于结束本次循环,继续下一次。多循环嵌套时,continue也是应用于最近的一次循环。
[操作] 要求输入员工的薪资,若薪资小于0则重新输入,最后打印出员工数量和薪资明细,以及平均薪资.

#测试continue
emp_num=0
salary_sum=0

while True:
    a=input("请输入一个字符(输入Q或q退出):")
    if a.upper()=="Q":
        break
    if float(a)<0:
        continue
    emp_num+=1
    salary_sum+=float(a)
print("人数{0},工资和{1},平均工资{2}".format(emp_num,salary_sum,salary_sum/emp_num))

运行结果:在这里插入图片描述

else语句

while、for 循环可以附带一个else 语句(可选)。如果 for、while 语句没有被break 语句结束,则会执行else子句,否则不执行。语法格式如下:
while 条件表达式:
 循环体
else:
 语句块
 
或者:
for 变量 in 可迭代对象:
 循环体
else:
 语句块
 
[操作] 以下操作是为了说明如果break跳出循环则不会执行else语句

#测试else
emp_num=0
salary_sum=0

for x in range(4):
    a=input("请输入一个字符(输入Q或q退出):")
    if a.upper()=="Q":
        break
    if float(a)<0:
        continue
    emp_num+=1
    salary_sum+=float(a)
else:
    print("您已经打印四名员工工资")
print("人数{0},工资和{1},平均工资{2}".format(emp_num,salary_sum,salary_sum/emp_num))

运行结果:
在这里插入图片描述

循环代码的优化

编写循环时,遵守下面三个原则可以大大提高运行效率,避免不必要的低效计算:
1.尽量减少循环内部不必要的计算
2.嵌套循环中,尽量减少内层循环的计算,尽可能向外提。
3.局部变量查询较快,尽量使用局部变量,少使用全局变量

其他优化手段
1.连接多个字符串,使join()而不使用+   (每一次+,都会产生新的字符串,进则是在本身修改)
2.列表进行元素插入和删除,尽量在列表尾部操作。(中间插入,依次会顺位移动)

使用zip()并行迭代

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

#测试zip()
for i in[1,2,3]:
    print(i)#遍历了一个列表

names=("rx","zl","lemon","hx")
ages=(18,20,22,30)
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]))

运行结果:(体现了zip在最短序列用完时就会停止)在这里插入图片描述

推导式创建序列

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

列表推导式
列表推导式生成列表对象,语法如下:
   [表达式  for  item  in  可迭代对象]
或者:{表达式  for  item  in  可迭代对象 if  条件判断}

#测试推导式
a=[x*2 for x in range(1,5)]#先把x分别赋值1到4,再分别乘2
print(a)


#用循环完成也一样,就是麻烦点
a=[]
for i in range(1,5):
    a.append(i*2)
print(a)

字典推导式

字典的推导式生成字典对象,格式如下:
{key_expression : value_expression  for  表达式 in  可迭代对象}
类似于列表推导式,字典推导也可以增加if条件判断、多个for循环。
[练习]统计文本中字符出现的次数

my_test="i love zl,zl is my husband,zl eat shit"
char_count={c:my_test.count(c) for c in my_test}#首先把每个字符取出来,写成c:后面是再在文本里出现的次数
print(char_count)

集合推导式

集合推导式生成集合,和列表推导式的语法格式类似:
   {表达式  for  item  in 可迭代对象}
或者:{表达式  for  item  in  可迭代对象 if 条件判断}

#集合推导式
b={x for x in range(1,100) if x%9==0}
print(b)

生成器推导式(生成元组


一个生成器只能运行一次。第一次迭代可以得到数据,第二次迭代发现数据已经没有了。

#生成器推导式
gnt=(x for x in range(4))
print(gnt)#运行结果为生成器对象
print(tuple(gnt))
print(tuple(gnt))#第二次就空了

运行结果:在这里插入图片描述
[操作:]画同心圆:

import turtle
t=turtle.Pen()
my_color=("red","yellow","green","blue","black")
t.goto(0,0)

t.width(5)
for i in range(5):
    t.up()
    t.goto(0, -10 * i)
    t.down()
    t.color(my_color[i%len(my_color)])
    t.circle(10*i+100)

turtle.done()#程序执行完窗口仍然在

运行结果:在这里插入图片描述
[课后作业]:画棋盘格

import turtle
t=turtle.Pen()

for i in range(21):
    t.goto(0,i*-10)#(0,i*-10)
    t.pendown()
    t.goto(200,i*-10)
    t.penup()
for j in range(21):
    t.goto(j*10,0)
    t.pendown()
    t.goto(j*10,-200)
    t.penup()
t.hideturtle()
turtle.done()#程序执行完窗口仍然在

运行结果:
在这里插入图片描述

函数用法和底层分析

函数是可重用的程序代码块。
函数的作用,不仅可以实现代码的复用,更能实现代码的一致性。一致性指的是,只要修改函数的代码,则所有调用该函数的地方都能得到体现。
在编写函数时,函数体中的代码写法和我们前面讲述的基本一致,只是对代码实现了封装,并增加了函数调用、传递参数、返回计算结果等内容。

函数的基本概念

1.一个程序由一个个部务组成人函数就是代表一个任务或者一个功能。
2.函数是代码复用的通用机制。

Python 函数的分类

1.内置函数
我们前面使用的str()、list()、len()等这些都是内置函数,我们可以拿来直接使用。
2.标准库函数
我们可以通过import语句导库,然后使用其中定义的函数
3.第三方库函数
Python 社区也提供了很多高质量的库。下载安装这些车后,也是通过import语句导入,然后可以使用这些第三方库的函数
4.用户自定义函数
用户自己定义的函数,显然也是开发中适应用户自身需求定义的函数。

函数的定义和调用

核心要点
Python中,定义函数的语法如下:
def  函数名 ([参数列表]):
   “文档字符串”
   函数体/若干语句
要点:
1.我们使用def来定义函数,然后就是一个空格和函数名称;
(1)Python执行def时,会创建一个函数对象,并绑定到函数名变量上。
2.参数列表
(1)圆括号内是形式参数列表,有多个参数则使用逗号隔开
(2)形式参数不需要声明类型,也不需要指定函数返回值类型
(3)无参数,也必须保留空的圆括号
(4)实参列表必须与形参列表一一对应
3.return返回值
(1)如果函数体中包含return语句,则结束函数执行并返回值;
(2)如果函数体中不包含return语句,则返回None值。
4.调用函数之前,必须要先定义函数,即先调用def创建函数对象
(1)内置函数对象会自动创建
(2)标准库和第三方库函数,通过import导入模块时,会执行模块中的def语句

形参和实参

def printMax(a,b):
    "实现两个数大小比较"
    if a>b:
        print("较大值:",a)
    if b>a:
        print("较大值:",b)
printMax(5,20)

在printMax函数中,在定义时写的printMax(a,b),a和b都是 形式参数,简称形参,也就是说,形式参数在定义函数的时候使用的,形式参数的命名只要符合,标识符命名规则即可。

在调用参数时,传递的参数为 实际参数,简称实参,上面代码中,printMax(10,20)10和20就是实际参数。

文档字符串(函数的注释)

程序的可读性最重要,一般建议在函数体开始的部分附上函数定义说明,这就是“文档字符串”,也有人称为“函数的注释”。我们通过三个单引号或者三个双引号来实现,中间可以加入多行文字进行说明。
我们调用help(函数名._ doc _)可以打印输出函数的文档字符串。

返回值

return返回值要点:
1.如果函数体中包含return语句,则结束函数执行并返回值
2.如果函数体中不包含return语句,则返回None值
3.要返回多个返回值,使用列表、元组、字典、集合将多个值“存起来”即可

#测试返回值用法
def add(a,b):
    print("打印两个数的和{0}+{1}={2}".format(a,b,(a+b)))
    return a+b   #要有这个return才能输出print(add(30,40)*10)
    print(a)#此行不执行因为上面return了
print(add(30,40)*10)

运行结果
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/sinat_41901394/article/details/106764263