2021-2-1python基础

循环结构

for循环和可迭代对象遍历

for循环通常用于可迭代对象的遍历

for 变量 in 可迭代对象
	循环体语言

【操作】遍历一个元组或列表、字符串、字典

for x in (20,30,40):#元组
    print(x*2)
*********************
for y in 'aswerg':#遍历字符串中的字符
    print(y)
*********************
d ={'name':'gaoqi','age':'18','add':'NO:001'}
for x in d:#遍历所有的key
    print(x)
for x in d.keys():#遍历所有的key
    print(x)
for x in d.values():#遍历所有的值
    print(x)
for x in d.items():#遍历所有的键值对
    print(x)

可迭代对象

python包含以下几种可迭代对象:
1、序列:包含:字符串、列表、元组
2、字典
3、迭代器对象(iterator)
4、生成器函数(generator)

range对象

range对象是一个迭代器对象,用来产生指定范围的数字序列。
range(start,end,[step])
数值从start开始(默认为0),end结束(不包含end),step为步长(默认为1)
【操作】利用for循环,计算1-100之间数字的累加和;计算1-100之间偶数的累加和;计算1-100之间奇数的累加和

sum = 0
for x in range(1,101):
    sum=sum+x
print(sum)
*****************************
sum = 0
for x in range(1,101,2):#奇数
    sum=sum+x
print(sum)
**************************
sum = 0
for x in range(0,101,2):#偶数
    sum=sum+x
print(sum)

嵌套循环

一个循环体内可以嵌入另一个循环,一般称为嵌套循环,或者多重循环
【操作】打印如下图案
0 0 0 0 0
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4

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

【操作】利用嵌套循环打印九九乘法表

for b in range(1,10):
    for a in range(1,10):
        if a<=b:
            print(b,'*',a ,'=' ,a*b,end= '\t')
    else:
        print()
**************************************************
for b in range(1,10):
    for a in range(1,b+1):#a的值只取1~b
        print('{0}*{1}={2}'.format(b,a,a*b),end='\t')#注意该条代码
    print()

【操作】用列表和字典存储下表信息,并打印出表中高于15000的数据

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)

break语句

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

while True:
    a=input('请输入一个字符(输入Q或q结束)')
    if a.upper()=='Q':
        print('循环结束,退出')
        break
    else:
        print(a)

continue语句

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

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('录入薪资:',salarys)
print('平均薪资{0}'.format(salarySum/empNum))

else语句

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

while 条件表达式:
	循环体
else:
	语句块
for 变量 in 可迭代对象:
	循环体
else;
	语句块

【操作】员工一共4人,录入这四位员工的薪资。全部录入后,打印提示‘您已经全部录入4名员工的薪资。最后,打印输出录入的薪资和平均薪资’

salarySum = 0
salarys = []
for i in range(1,5):
    i = input('请输入员工的薪资:')
    salarys.append(float(i))
    salarySum += float(i)
print('您已全部录入4位员工的薪资')
print('录入薪资:',salarys)
print('平均薪资{0}'.format(salarySum/4))
****************************************
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('您已经全部录入4名员工的薪资')
print('录入薪资:',salarys)
print('平均薪资{0}'.format(salarySum/4))

循环代码优化

遵循下面三个原则可以大大提高运行效率,避免不必要的低效计算:
1、尽量减少循环内部不必要的计算
2、循环嵌套中,尽量减少内循环的计算,尽可能向外提
3、局部变量查询较快,尽量使用局部变量
其它优化手段:
1、连接多个字符串,使用join而不是用+
2、列表进行元素插入和删除,尽量在列表尾部操作

使用zip()并行迭代

通过zip()函数对多个序列进行并行迭代,zip()函数在最短序列‘用完’时就会停止。
【操作】测试zip()并行迭代

names = ('高崎','高老二','高老三','高老四')
ages = (19,17,18,27)
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)]
print(y)
#不使用推导式
y=[]
for x in range(1,5):
    y.append(x*2)
print(y)
*****************************************
#使用列表推导式
y = [x**2 for x in range(1,50) if x%5==0]
print(y)
*****************************************
cells=[(row,col)for row in range(1,10)for col in range(1,10)]
for cell in cells:
    print(cell)

字典推导式

{key_expression:value_expression for 表达式 in 可迭代对象}
也可增加if条件判断,多个for循环

#统计文本中字符出现的次数
my_text = 'i love python ,i love myself,i love nature '
char_count = {c:my_text.count(c)  for c in my_text}
print(char_count)
#遍历my_text,将每一个字符都取出作为key,统计每一个字符在my_text中出现的次数

集合推导式

与列表推导式的语法格式类似:
{表达式 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)-----<generator object <genexpr> at 0x7fdc1f243c00>
print(tuple(gnt))-----(0, 1, 2, 3)
print(tuple(gnt))-----()#打印也属于遍历
********************************************
gnt = (x for x in range(4))
for x in gnt:#遍历生成器
    print(x,end=',')

综合练习

【操作】绘制不同颜色的多个同心圆_绘制棋盘

import turtle
my_colors=('orange','green','gray','pink')
t =turtle.Pen()
t.speed(0)
t.width(2)
for i in range(30):
    t.color(my_colors[i%4])
    t.goto(0,i*(-5))
    t.pendown()
    t.circle(5+5*i)
    t.penup()
turtle.done()

函数用法和底层分析

函数是可重复使用的程序代码块,函数的作用,不仅可以实现代码的重复使用,更能实现代码的一致性。一致性指的是只要修改函数的代码,则所有调用该函数的地方都能得到体现。

函数简介

函数的基本概念

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

python函数的分类

1、内置函数
例如list(),str(),len()等,可以拿来直接使用
2、标准库函数
通过import语句导入库,然后使用其中定义的函数
3、第三方库函数
python社区提供的高质量的库,下载安装这些库后,也可以通过impory语句导入进行使用
4、用户自定义函数
用户自己定义的函数,也是开发中使用用户自身需求定义的函数

函数的定义和调用

核心要点

def 函数名([参数列表]): "‘文档字符串’" 函数体/若干语句

def jining():
    print("*"*10)

for i in range(10):
    jining()

要点
1、使用def来定义函数,def后加空格和函数名称
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,'较大值')
    else:
        print(b,'较大值')
printMax(323,456)
文档字符串(函数的注释)

三个单引号可以定义多个字符串
程序的可读性最重要,建议在函数体开始的部分附上函数定义说明,即文档字符串,也称为函数的注释。通过三个单引号或三个双引号实现,中间可以加入多行文字进行说明。

help(printMax.__doc__)#双下划线
返回值详解

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

#测试返回值的基本用法
def add(a,b):
        print('计算两个数的和:{0},{1},{2}'.format(a,b,(a+b)))
        return a+b

def test02():
    print('sxt')
    print('gao')
    return  #return的两个作用:1,返回值;2、结束函数的执行
    print('hello')
    #运行结果:sxt   gao
def test03(x,y,z):
    return[x*10,y*10,z*10]
c = add(30,40)*10
print(c)#运行结果计算两个数的和:30,40,70
#700
d = test02()
print(d)#运行结果:None

print(test03(4,3,2))  #运行结果:[40, 30, 20]

return总结:在python中,函数需要有返回值时,则必须要有return加上要返回值的代码
如果不需要返回值,则return可写可不写,如果不写,python也会默认为none。20

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值