Python—for循环

for循环

Python—for循环_第1张图片
语法结构
for 临时变量 in 序列:
    语句块
for循环与while循环不同, while循环的条件是自定义的,自行控制循环条件, for循环是一种轮询机制,是对一批内容进行逐个处理
所以,理论上讲,Python的for循环无法构建无限循环(被处理的数据集不可能无限大)

python中for循环常用于遍历列表,元组,字符串以及字典等序列中的元素

上述语句的执行过程:如果序列中包含表达式,就会先计算求出表达式的值,然后依照序列值的顺序,依次赋值给变量然后执行语句块

而且之前也说过了,在python中,缩进是一个判断语句层级的重要指标,for循环也一定要注意语句之间的缩进问题,还有序列之后的

Python—for循环_第2张图片

如果for循环的序列是一个字符串的时候,则会将字符串里的字符依次赋给变量

如果for循环的序列是一个列表的时候,就会把列表里的数据依次赋给变量

Python—for循环_第3张图片

这样讲可能还是有点抽象,用一个python内置的len函数可以简单认识

len函数

首先介绍一下,len函数的作用是返回对象的长度和个数

我们就可以利用len函数求出两个不同序列的长度来演示为什么会出现以上情况

Python—for循环_第4张图片
Python—for循环_第5张图片

可以很明显的看出fruits列表的长度是3

变量letter的长度就是其中包含字符串的长度6

所以对于for循环来说处理的方式也是不一样的

range函数

for语句经常跟range函数连用,range函数是一个python内置函数可以创建一个整数列表

函数语法
range(start, stop[, step])

参数说明:

  • start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);

  • stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5

  • step:步长,表示每次相加的值,默认为1。例如:range(0, 5,2) 输出的值为[0,2,4]

如果要加上步长,就不能省略参数哦

Python—for循环_第6张图片

range函数还可以结合len函数使用

后续补充

for循环实例

简单理解了for循环的结构规则,我们可以进一步利用例题了解for循环

利用for循环统计字符

实验要求:
用户随机输入一段字符串和要查找的字符
利用 for循环遍历字符串计算指定字符出现的次数

可以尝试自己做,然后再看咱写的基础答案



分隔线



执行理论:

  • 首先要在循环外定义一个整数型变量用来累加计数

  • 然后利用for循环遍历字符串,嵌套if语句判断来完成

Python—for循环_第7张图片

利用for循环输出九九乘法表

先前我们已经利用while循环输出过一次九九乘法表,基础的逻辑已经知晓



分隔线



执行理论:

  • 首先我们是不是需要先定义一个外层for循环控制九九乘法表的行数

  • 其次我们要定义一个内层循环控制输出内容

Python—for循环_第8张图片

还是一样,九九乘法表的逻辑是:第一个乘数做变化,第二个乘数是当前的行数

那么根据range函数的性质,我们第内层循环j就要定义为(1,x+1)

当x等于3时,y的序列参数就有[1,2,3],符合逻辑

接下来就是格式化输出了

Python—for循环_第9张图片

课后编程训练——输出水仙花数

水仙花数:指的是一个三位的十进制数,其各位数字的立方和正好等于该数字本身

执行理论:

  • 首先我们需要利用for循环遍历所有的三位十进制数,也就是(100-999)

  • 然后取出十进制数的个位、十位和百位

  • 最后利用if语句进行乘方相加判断是否等于本身

如何取位

在python中取出各位数字有一个很简单的记忆方法:例有一个多位数x

  • 个位 = x // 1 %10

  • 十位 = x // 10 %10

  • 百位 = x // 100 % 10

  • 千位 = x // 1000 % 10

  • ……

Python—for循环_第10张图片


分隔线



count = 0
for x in range(100,1000):
    a = x % 10
    #个位
    b = x // 10 % 10
    #十位
    c = x // 100 % 10
    #百位
    if (a**3+b**3+c**3) == x:
        # '**'表示乘方,判断是否等于本身
        print(x)
        count += 1  #计数
print("一共有%d个水仙花数"%count)
Python—for循环_第11张图片

课后编程训练——百马百担

题目要求:
现有100匹马需驮100担货,其中大马驮3担,中马能驮2担,两匹小马驮1担
问一百匹马中有大马,中马,小马各多少

执行理论:

  • 首先给了常量信息:100匹马和100担货,大马驮3担,中马能驮2担,两匹小马驮1担

  • 那么我们是不是可以从中得知 大马,中马和小马的最大值?

  • 然后利用for循环嵌套这个三个值去遍历寻找能够同时满足100匹马和100担货的情况并输出



分隔线



huo = 100
ma = 100
count = 0 #计数
'''
首先定义常量值,之后如果想要改值,可以直接更改
不用去程序中一个个找到后更改
更加便捷
'''
for big in range(0,(huo//3)):
    #马匹最大值,就是整除它能驮的担数
    for medium in range(0,(huo//2)):
        for small in range(0,huo):
            if (huo == big * 3 + medium *2 + small * 0.5) and (ma == big + medium + small):
                '''
                判断,如果它们驮的担数和等于货物总量
                并且马匹的数量等于规定的总数量
                输出
                '''
                count += 1
                #计数
                print("第%d种方法是:大马:%d\t中马:%d\t\t小马:%d"%(count,big ,medium,small))
                '''\t是输出间隔制表符,至于第二个为什么要写两个,其实我也不晓得
                    但是加了才间隔正常,估计是制表符的一些性质
                '''
Python—for循环_第12张图片

总结:这一题需要三个for循环,不要怕做题出错,要跟着自己的思路做下去,实践出真知

编程题——利用for循环输出一个正立实心等腰三角形

执行理论:
  • 首先我们使用*来填充等腰三角形

  • 然后我们可以看这个我自己在word绘制的一个三角,一开始想的是:第一行是一个,第二行是两个,第三行三个,但是发现做出来有点麻烦,后面采用这种形式,每行都是奇数,好做

Python—for循环_第13张图片
  • 我们可以定义两个for循环,一个控制行数,一个控制输出内容

我们再回想一下range函数的性质,是不是不包含结束值,也就是说range(1,4)=[1,2,3]

接着看结果图的第二行,第三行……,是不是刚好等于它当前行数的两倍少一个



分隔线



但是这个时候会发现出现了问题,它的输出结果并不像我们想象的那样直接是一个等腰三角形,而是左对齐输出的,在查找了资料之后,好像大部分人用的都是再加个循环打印空格的方式来输出

Python—for循环_第14张图片

那我们可以想一下,第一行想要居中所需要的空格是不是取决于最后一行的长度?

看上图,如果有四行,第一行需要在第四行的中心输出,也就是第三个*号之后

第二行是不是要在第四行的第二个*号后面输出

那简单逻辑得出的结果:空格所需数=最大行-当前行

Python—for循环_第15张图片
Python—for循环_第16张图片

首先,我们通过input()函数获取用户输入的等腰三角形行数,并将其转换成整数类型。接着,我们使用range()函数创建一个从1到num的数字序列,该序列会被for循环遍历num次,即打印num行等腰三角形。

在外层的for循环中,我们使用变量x表示当前正在打印的行数。在内层的第一个for循环中,我们使用变量z控制当前行左侧的空格数,这里需要注意的是,等腰三角形左侧的空格数是与行数相关的,具体来说,第一行左侧的空格数是num-1个,第二行是num-2个,以此类推。因此,我们可以使用num-x来计算当前行左侧的空格数。

在内层的第二个for循环中,我们使用变量j控制当前行中间的星号数。由于等腰三角形每一行的星号数是与行数相关的,因此我们可以使用x+x来计算当前行中间的星号数。第九行一共就是17个星号,也就是2倍的行号少1

最后,我们使用print()函数输出当前行,并通过设置end参数为空字符串来避免自动换行,然后使用另一个print()函数来输出一个空字符起到换行的作用,使得下一行等腰三角形能够与当前行隔开。

调试

在程序有BUG/缺陷,需要修复时,我们可以通过编译器自带的断点调试功能实现程序的单步可视化执行。对于我们这些初学者而言,断点调试还有另外一个用途:帮助理解程序背后的逻辑

这里咱们基于Visual Studio Code编辑器简单实践一下调试的功能

断点

关于断点我了解的不太多,在VC code中可以理解为是在程序的执行过程中设置了一个节点

当程序运行到这个节点时会中断执行,之后的程序由用户决定是否执行并且开始记录程序内变量变化

实践

这是一段求两数的最大公约数和最小公倍数的python代码,还有一点bug,只做个演示,见谅

m = int(input("请输入整数m:"))
n = int(input("请输入整数n:"))

'''
判断两数中的最大和最小值
因为最大公约数的取值范围不可能超过两数的最大值
最小公倍数的取值范围不可能超过两数的乘积
'''
if m > n:       
    max = m
    min = n
else:
    max = n
    min = m
#最大公约数
for x in range(1,max+1):
    if(m % x == 0) and (n % x ==0):  #最大公约数的判断条件是能被两数同时整除的最大数
        result = x
print("%d和%d的最大公约数为:%d"%(m,n,result))

#最小公倍数 (1)
beishu = int((m * n)/result)
print("%d和%d的最小公倍数为:%d"%(m,n,beishu))
#最小公倍数 = 两数的乘积 / 最大公约数

在鼠标移动到VC code列标的左边都会出现一个浅红色的点,这个就是设置断点的位置,点击就可以设置断点,再次点击可以取消,一个程序可以设置多个断点

Python—for循环_第17张图片

还有在进行调试之后程序左边的四个记录框的作用

  • 变量区:可以监视断点后变量的变化

  • 监视区:可以自定义监视程序中某个值的变化

Python—for循环_第18张图片

与正常的程序运行不动,程序并没有一口气从头执行到尾,而是暂停在了第28行的断点处。图中的黄色箭头所指的行是接下来准备执行的代码行,然后我们点击下一步(也就是第三个按钮)

Python—for循环_第19张图片

然后下方的终端就会出现输入框,我们输入完之后,点击下一步程序会继续执行

然后左侧的变量框中也会记录我们程序中的变量值变量的变化

Python—for循环_第20张图片

当我们把鼠标放在变量上停顿一会,也会出现当前变量的值

需要注意的是这里的黄框的意思是准备要执行的步骤,也就是还没有执行,所以这里的x的值还是上次循环的值,要进行下一步之后才看得到x值的变化

Python—for循环_第21张图片

简单的演示就到这里,可以去实践慢慢熟悉

你可能感兴趣的:(python,python)