7.for语句详解与应用

上一节我们介绍了while语句,break与continue语句,这来介绍另一种循环方式:for;
随着知识点增加,我们可以做的事情也越来越多。

主要内容:

  • 小目标:掌握for语句
  • 主要内容:for, break, continue,逻辑思维强化

1.for语句

for语句主要用来遍历可迭代对象;
字符串,列表等都属于可迭代对象;

1.1 for语句基本语法

基本语法:

# for, in 为关键字
for val in iters:
    代码1

逻辑如下图:

for语句主要用于在迭代对象中取数据,直到取完。
基本理解:

1:每次从iters中取一个对象,
2:将取出对象赋值给item,
3:执行代码1
4:继续重复1,直到items中值取完。

来看一个例子:

s = '123456789'
for val in s:
    print(val, end=',')

输出结果:

1,2,3,4,5,6,7,8,9,

1.2 for语句处理异常

问题:for遍历时候,如何结束?

 

  1. 遍历结束,会触发异常:StopIteration;
  2. for语句处理异常,然后结束;

 

来看一个例子:

#iter方法:字符串转成iterator;
items = iter('12')
#使用next函数,每次取一直元素
print(next(items))
print(next(items))
#2个元素取完,在次获取报异常
print(next(items))

结果:

1
2
      5 print(next(items))
      6 #2个元素取完,在次获取报异常
----> 7 print(next(items))
StopIteration: 

使用for循环:

for item in iter('12'):
    print(item)

结果:

1
2

对比可知:for循环处理StopIteration异常。

1.3 for与break,continue使用

for与break,continue使用与while类似,直接来看一个例子;
给定一个字符串,打印到终端,并将非数字字符替换成'*';
例如:'abc1b23c3',输出:'***1*23*3';
分析:如何判断字符是否为数字,可以使用比较运算符,先来做一个小测试:

c = '2'
print("c>='1':",c >= '1')
print("c<='9':",c <= '9')
print("'a'<='9'", 'a' <='9')

结果:

c>='1': True
c<='9': True
'a'<='9' False

通过测试可以发现:使用比较可以知道字符是否在['1','9']之间。
直接上代码:

s = 'abc1b23c3'
for val in s:
    if val >='1' and val <= '9':
        print(val, end='')
        continue
    print('*', end='')

再来看另一个例子:

给定字符串,打印字符串到终端,如果遇到数字字符串,后面内容不打印;
例如:'abc1b23c3',输出结果:abc;

实现思路:

 

  1. 遍历字符串;
  2. 判断字符是否是数字,如果是数字,跳出循环;
  3. 打印当前字符;

 

代码实现:

s = 'abc1b23c3'
for val in s:
    if val >='1' and val <= '9':
        break
    print(val, end='')

结果:abc

有读者朋友会有疑问:字符串中有很多相应的方法,为什么不使用?
因为在开始,我们还是以锻炼思维为主,到了后面字符串时候,会有其他更烧脑的案例等着你。

1.4 for与else配合使用

for与else同while类似:

 

  1. for循环中使用break结束循环,不执行else对应的代码;
  2. for循环正常结束,执行else对应的代码;

 

2. range与enumerate

range与enumerate是Python中常用的两个函数,我们来详细介绍;

2.1 range函数:

range函数用于产生range对象,对象中的每个元素为数字;
可以使用help查看range函数说明:

range(stop) -> range object
range(start, stop[, step]) -> range object

参数说明:

 

  1. start为初始值;
  2. stop为结束值,最大值为stop-1;
  3. step为步进值,[, step]这种参数为可选参数;

 

函数说明:

 

  1. 只有stop, 产生:0,1,2...stop-1数字;
  2. 有start与stop,产生:start,start+1,start+2, ..., stop-1数字;
  3. 如果有step,产生:start, start+step, start+2*step, ..., stop-1数字;

 

range对象可以使用for循环遍历,几个例子:

  • 产生0~9数字:
#最大值为10-1
for i in range(10):
    print(i, end=' ')

结果:

0 1 2 3 4 5 6 7 8 9 
  • 产生2~20之间偶数:
#最大值为21-1
for i in range(2, 21,2):
    print(i, end=' ')

结果:

2 4 6 8 10 12 14 16 18 20 

2.2 enumerate函数

enumerate将可迭代对象转成enumerate对象,函数原型:

enumerate(iterable, start=0)

enumerate对象内容:iterable索引与索引对应的元素:

 (0, seq[0]), (1, seq[1]), (2, seq[2]), ...

如果指定start,enumerate对象内容:

(0+start, seq[0]), (10+start, seq[1]), (20+start, seq[2]), ...

来个一个例子:

for x in enumerate('123'):
    print(x)

结果:

(0, '1')
(1, '2')
(2, '3')

换一种方式遍历:

for index, val in enumerate('123'):
    print(index, val)

结果:

0 1
1 2
2 3

分析:

for遍历enumerate对象,获取一个元组(两个值组成的对象)
赋值方式:index,val = (v1,v2)
结果:index为索引,value为索引对应的值

3. 练习:

找出,1~2000之间闰年
实现思路:

 

  1. 产生1~2000数字;
  2. 闰年判断方法;

 

代码实现:

start, stop = 1, 2001
#年份范围:[1, 2000]
for year in range(start, stop):
    #闰年判断条件
    if year % 4 ==0 and year % 100 or year% 400 == 0:
        print(year, end=' ')

如果这样做,这个太简单了,我们把年份加大,并加上程序执行时间:

import time
ts = time.time()
start, stop = 1, 20000001
#年份范围:[1, 2000]
for year in range(start, stop):
    #闰年判断条件
    if year % 4 ==0 and year % 100 or year% 400 == 0:
        #print(year, end=' ')
        #pass是空语句,为了避免print干扰,我们将其注释掉
        pass
print(time.time()-ts)

结果,执行时间:4.505320072174072;
如何进行优?能不能将效率提高10倍?挑战下自己。

分析:

 

  1. 闰年规则:两个闰年相差4;
  2. 找到第一个闰年:y;
  3. 根据range参数规则,设置:y,stop, step=4;

 

我们来看代码实现:

import time
ts = time.time()
start, stop =  1, 20000001
#年份范围:[1, 2000]
for year in range(start, stop):
    #闰年判断条件
    if year % 4 ==0 and year % 100 or year% 400 == 0:
        #如果找到第一个闰年
        #起始值为year,结束值为stop
        #step设置为4
        for y in range(year, stop, 4):
            pass
            #print(y)
        #注意,找到第一个闰年之后,跳出循环,不在继续查找;
        break
print(time.time()-ts)

结果:0.25073933601379395,在同一个电脑测试,效率提升20倍+;

总结:编程语言中的逻辑单独理解都是比较简单的,但是如何在实际学习与工作实践中用好,这个是需要下功夫的。

编程初级阶段学习目标:

 

  1. 快速掌握语言语法及相关规则;
  2. 提升逻辑思维,问题分析能力,编码能力;

 

总结:

  • for基本语法与使用;
  • range函数与enumerate函数介绍与使用;
  • 通过闰年案例,希望读者朋友能够对编程有新的认识。

版权声明:
作者:WaterBear
链接:https://l-t.top/2864.html
来源:雷霆运维
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录