5. Python 循环的本质就是一段代码懒得重复写

Python93

为啥要滚雪球学 Python,目的就是当你学会编程一些思想之后,可以让知识的雪球自行滚动起来。

已完成的文章

标题 链接 1. 这才是 Python 学习的正确起手姿势,滚雪球学 Python
https://dream.blog.csdn.net/article/details/109586142

  1. 无门槛学会数据类型与输入、输出函数,滚雪球学 Python
    https://dream.blog.csdn.net/article/details/109697047

  2. 无转折不编程,滚雪球学 Python
    https://dream.blog.csdn.net/article/details/109785235

  3. 列表一学完,Python 会一半,滚雪球学 Python
    https://dream.blog.csdn.net/article/details/109999211

@

*
- 已完成的文章
* 五、Python 循环的本质就是一段代码懒得重复写
- 5.1 for 循环
+ 5.1.1 for 循环基本使用
+ 5.1.2 for 循环嵌套 if 判断语句
- 5.2 range 函数
- 5.3 for 循环补充知识
+ 5.3.1 for 循环嵌套
+ 5.3.2 break 终止循环
+ 5.3.3 continue 继续循环
+ 5.3.4 for ... else 循环
- 5.4 while 循环
+ 5.4.1 while 循环的经典应用
+ 5.4.2 while 其他说明
- 5.5 这篇博客的总结

本系列文章将在2021年春节前完成,欢迎关注,点赞,评论 --- 梦想橡皮擦

五、Python 循环的本质就是一段代码懒得重复写

程序中的循环概念非常容易理解,一段相似的代码不想重复去写,然后让程序去完成这个操作就是循环。例如从 1 加到 100,如果你依次去加会发现,代码又臭又长,最好的写法当然是让程序通过循环依次去累加。

5.1 for 循环

for 循环可以将对象中元素进行遍历(也叫迭代)操作,每次遍历都可以对元素进行相应的处理,截止到本篇博客,可遍历(迭代)对象目前为列表类型。

for 循环的语法格式如下:

for item in my_list(可迭代对象):
    for 代码块

上述代码中的 item 就是每次循环得到的对象,即可迭代对象里面的每个值。

这里最重要的一个概念是可迭代对象(iterable object),英文你也需要记住,后面经常用到。

可迭代对象包含的类型非常多,例如有列表、元组、字典与集合,除了列表以外其它的内容将在后面进行学习。

5.1.1 for 循环基本使用

学习列表之后,对于 for 循环你需要建立一个基本的概念就是 for 循环可以依次获取到列表中的每一项,注意是依次获取。

编写代码的时候与 if 语句一样要注意缩进。

接下来通过 for 循环打印列表中每一项。

my_list = ["apple","orange","banana","pear"]
for item in my_list:
    print(item)

for 循环语句中只要缩进一致,可以由多行代码构成,例如:

my_list = ["apple","orange","banana","pear"]
for item in my_list:
    print("输出一个水果")
    print(item)

5.1.2 for 循环嵌套 if 判断语句

for 循环里面可以是多段代码,那这样其实也是可以嵌套 if 语句的,具体写法可以参考:

my_list = [1,2,3,4,5,6,7]
for item in my_list:
    if item >3:
        print("该元素比3大")
        print("该元素是:",item)

上述代码可以判断当列表中的元素大于 3 的时候,输出 if 语句中的内容,你可以尝试补全 else 语句。

5.2 range 函数

在 Python 中可以通过 range 函数生成一个等差序列,这个等差序列就是一个可迭代对象,如果使用 type 函数查看对象类型会发现 range 函数生成的对象类型是 range,具体代码如下:

my_range = range(4)
print(my_range)
print(type(my_range))

输出结果为:

range(0, 4)

可以看到 range 函数生成的是一个 range 对象,上文中用到了 range 函数,语法格式为 range(4),通用的语法格式如下:

range(start,stop,step)

其中只有 stop 是必填项,step 默认值是 1,如果省略 start 默认表示从 0 到 stop-1。具体运行下述代码即可清楚。

my_range1 = range(4)
for i in my_range1:
    print(i)

print("#"*10)
my_range2 = range(1,4)
for i in my_range2:
    print(i)

print("#"*10)
my_range3 = range(1,6,2)
for i in my_range3:
    print(i)

输出结果如下,我们都是使用 for 循环语句进行的输出,通过 list 函数也可以。

0
1
2
3
##########
1
2
3
##########
1
3
5

range 函数在后续的编程中属于常用函数,很多场景下都需要借助它生成一个等差序列,所以该函数请牢牢掌握。所谓掌握的意思就是现在你需要好好的打一打代码。

5.3 for 循环补充知识

5.3.1 for 循环嵌套

一个循环中的代码块嵌套另一个循环称为循环的嵌套,在编写循环嵌套代码的时候需要注意。

代码块的缩进一定要留意,核对好代码块属于哪个 for 循环

解析来是一个经典案例,当年橡皮擦学习的时候就在这里废了很大力气,一直到期末考试也没弄明白,入门阶段这应该比较难理解的程序了,通过 Python 输出一个九九乘法表。

for i in range(1,10):
    for j in range(1,10):
        print("%d * %d = %3d "%(i,j,i*j),end=" ")
    print(" ")

代码运行之后如下图所示:
5. Python 循环的本质就是一段代码懒得重复写
这个程序包含了 for 循环,for 循环嵌套,格式化输出字符串,还有不同级别的缩进。
循环在执行的时候,你可以先这么理解,外层循环转 1 遍,内层循环跑 1 圈。

这句话的含义初学到这个阶段,很难理解,这是啥意思?很多教材可能会写流程图,告诉你分支怎么走,怎么走。很费劲,在橡皮擦看来这是个顿悟的事情。

在上述代码中标记两条线。
5. Python 循环的本质就是一段代码懒得重复写
外层循环就是说的最上面的循环,它循环一次,里面的循环,就是包含变量 j 的那个 for 循环,要循环 1 圈,就是都循环一遍。
那结论就出来了。

  • 当 i = 1 的时候,j 从 1 一直变到 10,然后在输出一个 print(" ")
  • 当 i=2 的时候,i 还是要从 1 变到 10,然后在输出一个 print(" ")
  • 当 i=3 的时候...,然后在输出一个 print(" ")
  • i=4 的时候,然后在输出一个 print(" ")

当 i=9 的时候,内层循环循环完最后一圈。所有的循环都运行完毕,结束该程序。

特别说明一下 print 函数输出的时候,默认会带一个 \n,之前的课程已经学习了,该符号代表换行。如果想去掉 print 函数自带的换行符,需要使用 end 参数,即 print("待输出内容",end=" ")

放心,虽然我详细的说了一遍流程,能悟了的同学就地就悟了,看不懂还是看不懂,这个地方确实很难(难吗?),不过不用担心,随着写代码越来越多,慢慢的你就会了,不会写这个也不影响后续的学习,总之多写两遍就懂了。

5.3.2 break 终止循环

终止循环你就这么理解,当满足某个条件的时候,我不想循环了,这就是 break 的使用场景,当满足某个条件这肯定用到的是 if 语句。

例如,当循环一个列表的时候,如果出现一个大于 3 的数字,那终止循环,代码如下:

for i in range(1,10):
    if i > 3 :
        print("出现大于3的数字,终止循环")
        break

5.3.3 continue 继续循环

continue 与 break 类似,都是当满足某个条件时,要做的事情,只不过程序碰到 continue 关键字,不是终止循环,而是进入下一次循环,当前循环不管还剩下什么工作,不做了。

for i in range(0,5):
    if i > 3 :
        continue
    print("当前数字为:",i)

上述代码中在 for 循环存在一个 if 判断,当 i>3 的时候,也就是列表中数字大于 3,直接进入下一次循环,这样导致一个事情就是在循环中发现比 3 大的数字之后,print 就不会执行了,所以运行代码会发现下述结果,只显示小于等于 3 的数字。

当前数字为: 0
当前数字为: 1
当前数字为: 2
当前数字为: 3

5.3.4 for ... else 循环

for ... else 循环是 Python 中一种特定的语法结构,大白话就是当 for 循环执行完毕了就执行 else。很多时候大白话能理解了,你能用来描述清楚这个是干啥,这个知识点其实已经掌握了,初学阶段没必要咬文嚼字的。

例如测试下述代码:

for i in range(0,5):
    if i > 3 :
        continue

    print("当前数字为:",i)
else:
    print("不管上面的 for 循环干了啥,我都要执行一次")

在这里其实有个知识点需要补充下,就是代码配对的问题,啥叫配对,if 和 else 就是一对,为什么会有这种说法呢,参见下述代码:

if 条件:
    pass
if 条件:
    pass
else:
    pass

pass 表示占位,在 Python 中是支持该关键字的,就是还没想清楚这里写啥代码,先弄个单词放着占住位置。

上面的代码出现了两个 if 和一个 else,一定要注意,else 和最近的 if 是一对,最上面的 if 就是一个普通的 if。这种问题在代码嵌套的时候会更加有意思。

if 条件:
    pass
if 条件:
    if 条件:
        pass
    else:
        pass
else:
    pass

依据缩进关系,你要找好 if 与 else 哪个是一对显得非常重要了。肉眼看不出来就实际敲敲键盘。

综合刚学习的内容,现在你知道如何对 for else 进行配对了吗?

5.4 while 循环

while 循环也是 Python 中的一种循环语法,不过这种循环很容易搞成死循环,就是一直循环下去到电脑崩溃,死循环有坏处但也有它的应用场景,后面咱也会学习到。

while 循环的语法格式如下:

while 条件:
    代码块

格式中 条件非常重要,这个条件运算之后需要判断真假,为真(True)才会进入到 while 中的代码块运行程序。

5.4.1 while 循环的经典应用

while 循环除了语法结构与 for 循环有差异以外,很多地方基本一致,接下来完成一个通过 while 循环实现的经典案例 - 猜数字,这个勉强算是一个游戏。

# 最终的答案为 12,其实可以用随机数
answer = 12
# 用户猜的数字
guess = 0
# 条件为 判断 guess 不等于 answer
while guess!=answer:
    guess = int(input("请输入一个 1~100 之间的数字:"))
    if guess > answer:
        print("你的数字大了")
    elif guess < answer:
        print("你的数字小了")
    else:
        print("恭喜猜对,数字为 12 ")

该案例虽然小,但是整合了很多之前学过的知识,例如 input 获取用户输入,int 将字符串转换成整数,if...elif...else 语句等内容,越是简单的知识点在后续的课程中出现越频繁,一定要注意基础最重要。

5.4.2 while 其他说明

while 循环的使用与 for 循环基本一致,很多时候你甚至可以看成是一回事。因为 break 与 continue 语句同样适用于 while 循环,这里不再做重复知识点的说明,后面进入复杂编码的时候,自然可以掌握。

5.5 这篇博客的总结

循环也属于 Python 中的基本语法结构,分支与循环学习完毕之后,在加上最基本的顺序执行,那对于编程来说已经足够完成很多任务了,你也可以在想想,现实世界还有没有其它解决问题的路径方式,如果得到的答案是 没有,其实程序开发也就这点事儿了。

不过我也是从新手走来,现在看这些知识 so easy ~,但是第一次学习的时候,还是发出了这是啥,咋回事,怎么就实现了的灵魂问题,不用太担心,眼睛停下,手动起来,敲一敲键盘就可以了。

编程没有难点,难的是按键盘的速度。

本篇讲了 range 函数,但是橡皮擦省略了 列表生成器部分因为这个阶段学习有点难了,后面的课程会将其补齐。

最后一碗毒鸡汤

没有钱包的充实,哪来内心的宁静。 O(∩_∩)O 哈哈~ 👗👗

&#x60F3;&#x5B66;Python&#x722C;&#x866B;&#xFF0C;&#x53EF;&#x4EE5;&#x8BA2;&#x9605;&#x6A61;&#x76AE;&#x64E6;&#x4E13;&#x680F;&#x54E6;~ 👗👗👗 点击发现惊喜 👗👗👗

💎💎💎💎💎💎💎💎💎💎💎

今天是持续写作的第 4/100 天。
如果你有想要交流的想法、技术,欢迎在评论区留言。

如果你想跟博主建立亲密关系,可以关注同名公众号 " &#x68A6;&#x60F3;&#x6A61;&#x76AE;&#x64E6;",近距离接触一个逗趣的互联网高级网虫。
博主 ID:梦想橡皮擦,希望大家点赞、评论、收藏。

Original: https://www.cnblogs.com/happymeng/p/15437501.html
Author: 梦想橡皮擦
Title: 5. Python 循环的本质就是一段代码懒得重复写



相关阅读

Title: 【光学】Matlab实现迈克尔逊干涉仪动态仿真

1 内容介绍

从光的干涉理论出发,分析了迈克尔逊干涉实验原理和光程差表达式,利用Matlab改变参数对迈克尔逊干涉实验现象进行二维和三维仿真模拟,通过仿真提供了更加直观清晰的实验图像,这对于迈克尔逊干涉仪的实验教学起到很好的相辅作用.​

2 仿真代码

%

% 脚本用于绘制迈克尔逊等倾干涉光路图及干涉图像;

%

%% 绘制前处理

clear %清除变量

clc; %清空历史窗口中的内容

close all; %关闭所有图形窗口

%% 图像绘制

r_max=1; %最大半径(相对坐标)

[h1,h2,hT,R]=Michelson_Draw_1(r_max); %绘制第一帧图像并得到句柄

theta_i=atan(R); %夹角

%pause %暂停

for d=-5:0.05:5

e=2*d;

DD=2ecos(theta_i); %光程差

I=cos(pi*DD).^2./(1+R.^2); %相对光强

set(h1,'YData',[20+d 20+d]); %M1'位置

set(hT,'Position',[10 20+d 0]); %M1'文字标注

set(h2,'CData',100*I) %设置光强

drawnow %更新屏幕

if get(gcf,'CurrentCharacter')==char(27)

break,

end % 按ESC键退出

%% 保存为gif文件:

gifname = 'Michelson_Draw_1.gif'; %建立一个gif文件

drawnow %图像实时更新

frame = getframe(1); %获取当前图像作为影片帧

im = frame2im(frame); %返回与影片帧关联的图像数据

[imind,cm] = rgb2ind(im,500); %格式转换

if d == -5

imwrite(imind,cm,gifname,'gif'); %创建一个gif文件

else

imwrite(imind,cm,gifname,'gif','WriteMode','append','DelayTime',0.01);

%向gif文件中添加一张图片

end %结束循环

end

3 运行结果

5. Python 循环的本质就是一段代码懒得重复写

5. Python 循环的本质就是一段代码懒得重复写

4 参考文献

[1]邹智星, 胡卫东, 王子涵,等. 基于MATLAB的迈克尔逊干涉仪干涉视频处理[J]. 西南师范大学学报:自然科学版, 2019, 44(7):5.

[2]冯明春, 王玉杰. 基于Matlab对迈克尔逊干涉实验仿真的分析研究[J]. 大学物理实验, 2021.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

Original: https://blog.51cto.com/u_15287693/5609862
Author: matlab科研助手
Title: 【光学】Matlab实现迈克尔逊干涉仪动态仿真