2020-09-18综合练习及循环的使用

Python学习

使用For循环

通过使用使用For循环通常用于可迭代对象的遍历:python含义可迭代对象有1.序列:包含:字符串,列表,元组 2.字典 3.迭代器对象(iterator) 4.生成器函数(generator)5.文件对象
range对象:是一个迭代器对象,用来产生指定范围的数字序列。

下面是Demo

for x in (20,30,40):
    print(x*3)
for y in 'abcdef':
    print(y)
d = {'name':'高崎','age':18,'jop':'程序员'}
for x in d :
    print(x)
for x in d.keys():
    print(x)
for x in d.values():
    print(x)
for x in d.items():
    print(x)
for x in range(5):
    print(x)
#计算0-100之间数字的累加和
num = 0
sum_all = 0
while num<=100:
    sum_all=sum_all+num
    num+=1
print('1-100所有数的累加和:',sum_all)
sum_all = 0
sum_odd = 0
sum_even = 0
for x in range(101):
    sum_all+=1
    if x%2==1:
        sum_odd+=x
    else:
        sum_even += x

print('1-100累加总和{0},奇数和{1},偶数和{2}'.format(sum_all,sum_odd,sum_even))
使用嵌套循环

一个循环体内可以嵌入另一个循环,一般称为嵌套循环,或者多重循环。
下面是Demo

for x in range(5):
    for y in range(5):
        print(x,end='\t')
    print('\n')  #起到换行的作用
#9*9乘法表
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()  #换行的作用
#用列表和字典存储信息,并打印出表中工资高于15000的数据
tp = []
r1 = dict(name='高小一',age=18,salay=30000,city='北京')
r2 = dict(name='高小二',age=19,salay=20000,city='北京')
r3 = dict(name='高小三',age=20,salay=10000,city='北京')
tp = [r1,r2,r3]

for x in tp:
    if x.get('salay')>15000:
        print(x)
使用break,continue,else语句

通过使用break语句可用于while和for循环,用来终结整个循环。当有嵌套循环时,Barak语句只能跳出最近一层循环。
continue用于结束本次循环,继续下一次。多个循环嵌套时continue也是应用于最近的一层循环
while,for循环可以附带一个else语句(可选),如果for ,while语句没有被break语句结束,则会执行else子句,否则不执行。

下面是Demo

#测试break
while True:
    a = input('请输入一个字符(输入Q或q时退出)')
    if a=='q' or a =='Q':
        print('循环结束,退出')
        break
    else:
        print(a)
 #测试continue
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))
print('-------else语句使用------------')
salarySum = 0
salarys = []
for i in range(4):
    s = input('请输入一共4名员工的薪资(按Q或q中途结束)')
    if s.upper()=='Q' or 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.列表进行元素插入和删除,尽量在列表尾部操作

下面是Demo

#优化前
import time
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()并行迭代

通过使用zip()函数对多个序列进行并行迭代,zip()函数在最短序列用完时就会停止

下面是Demo


for i in [1,2,3]:
    print(i)
names = ('高崎','高老二','高佬三','高老四')
ages = (18,16,20,25)
jobs = ('老师','程序员','公务员')
for name,age,job in zip(names,ages,jobs):
    print('{0}--{1}--{2}'.format(name,age,job))
for i in range(3):
    print('{}--{}--{}'.format(names[i],ages[i],jobs[i]))
推导式创建序列

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

下面是Demo

#列表推导式
y = [x*2 for x in range(1,10) ]
print(y)

r = []
for x in range(1,50):
    if x%5==0:r.append(x*2)
print(r)

cells = [(row,col) for row in range(1,10) for col in range(1,10)]
print(cells)
#字典推导式
my_text = 'i love you sxt,i love gaoqi'
char_count = {c:my_text.count(c) for c in my_text}
print(char_count)

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

#生成器推导式(生成元组)
gnt = (x for x in range(4))
print(tuple(gnt))
print(tuple(gnt))

for x in gnt:  #gnt是生成器对象,生成器是可迭代的对象
    print(x,end=',')
print(tuple(gnt))

综合练习

通过使用turtle这个库来画图

下面是Demo

#循环画圆

import turtle
t = turtle.Pen()
my_colors = ('red','green','yellow','black')
t.width(6)
t.speed(10)
# for i in range(10):  # 0 1 2 3 4
#     t.penup()    #起笔
#     t.goto(0,-i*10)  #0,-100,-200,-300,-400
#     t.pendown()    #下笔
#     t.color(my_colors[i%len(my_colors)])#颜色循环选择
#     t.circle(30+i*10)
# turtle.done()  #执行完,窗口仍然在
# #画棋盘
import turtle

pen = turtle.Pen()
pen.speed(10)  # 速度

width = 30  # 格子宽度
count = 18  # 横向纵向格子数

o = width * count / 2  # 开始绘制原点

for i in range(count + 1):
    pen.penup()  # 画笔抬起
    pen.goto(-o, o - i * width)  # 指从当前的点指向括号内所给坐标,也就是说,从-180这点,一直往右这个点开始画
    pen.pendown()  # 画笔放下
    pen.goto(o, o - i * width)

for i in range(count + 1):
    pen.penup()
    pen.goto(-o + i * width, o)
    pen.pendown()
    pen.goto(-o + i * width, -o)

pen.hideturtle()  # 隐藏画笔
turtle.done()  # 画面停留
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值