Day4
循环
循环这个环节呢,算是个人认为比较难的一个环节,对于这个循环里面的循环步骤个人认为有点绕弯子,不过在本篇文章中,我个人也针对这些问题进行了个人的总结和方法的归纳。
一、 程序的三大流程
想要写好一串代码个人认为一定要知晓它其中的基本流程,只有脑子里有概念了,手上一定也不会差到哪里去。所以先总结一下程序的三大流程
- 顺序:代码的执行顺序遵循从上到下的顺序,顺序执行代码
- 分支:根据条件判断,决定执行代码的分支
- 循环:让特定的代码,执行循环的操作
二、 while循环的基本使用
2.1 while语句基本语法
上面也说过了,循环就是让特定的代码执行循环的操作。while循环最常见的应用场景就是:让执行的代码按照指定的次数重复执行,代码演示如下 ```bash1. 定义重复次数计数器
i = 1
2. 使用 while 判断条件
while i <= 5:
# 要重复执行的代码print("Hello Python")# 处理计数器 ii = i + 1
print(“循环结束后的 i = %d” % i)
(以上代码就是利用while循环 循环打印了5次hello word)<br />注:while 语句以及缩进部分是一个 完整的代码块针对这一串代码我们可以来分析一下每条代码对应的意思:i = 1,这个 i 在这里其实我们可以把它理解为一个计数器,也就说记录我们这个while循环次数的一个变量<br />while i < 5: ,这一句的意思呢,我们可以理解为让这个 i 循环5次在第4次循环结束的时候退出循环,打印输出4次循环的结果。如果是 i <= 5,就是循环6次,在第5次的循环结束时退出循环,打印5次结果。<br />print就不多说了,打印输出()里面的内容<br />i += 1,这一句的意思就是在每一次循环结束的时候让 i 这个变量加 1 然后回到while i < 5这里进行判断。假代码格式如下:<br /><br />在写循环代码的时候可能会遇到**死循环**,遇到了也不需要担心,检查一下代码是否有添加计数器 + 1这样的操作可以有效地减少这种事情发生的概率。**死循环由于程序员的原因,忘记在循环内部修改循环的判断条件,导致循环持续执行,程序无法终止!**<a name="F4s0k"></a>#### 2.2 赋值运算符- 在python中,用 = 可以给变量进行赋值- 在算术运算时,为了简化代码的编写,Python 还提供了一系列的 与 算术运算符 对应的 赋值运算符- 注:在进行赋值运算符的编写时,中间不能有空格。(正确示范:+= 错误示范:+ =)<br />下表总结了赋值运算符<br />注:**在赋值运算符的书写过程中一定不能空格 不能有空格 不能有空格,虽然你加了空格系统也会报错给你。**<a name="u6FtT"></a>#### 2.3 Python 中的计数方法常见的计数方式有两种,可以分别被称为:<br />自然计数法:自然计数法(从 1 开始)—— 更符合人类的习惯,所以我叫他人类计数法。<br />程序计数法:(从 0 开始)—— 几乎所有的程序语言都选择从 0 开始计数<br />因此,大家在编写程序时,应该尽量养成习惯:除非需求的特殊要求,否则 循环 的计数都从 0 开始<a name="bliF6"></a>#### 2.4 循环计算在程序开发中,通常会遇到利用循环重复计算的需求,那我们怎么去满足这个要求呢,看代码我们来分析一下:<br />1.计算 0 ~ 100 之间所有数字的累计求和结果<br /><br />其实不难看出,这串代码跟我们一开始的那一串代码很相似,只是加了几个小东西而已,我们来一个个分析一下- 第一步,先不用急着看e = 0是啥东西,让我们先找到while循环的框架,也就是从i = 1开始到后面的 i += 1,这个框架里面定义了 i 循环的次数是小于等100次,也就是转100圈而已嘛哈哈- 第二步,找一下在这个基本循环的框架上加了啥东西。我们可以看到在这串代码里多了e = 1,e += i,print(’1-100的求和结果是%d’ % e),它们分别代表的是:- e = 0:设置 e 这个变量去承接 i 循环了100次后的值相加的总和。- e += i:前面说过了,代码的执行顺序遵循从上到下的顺序,所以我们一步一步来走代码看一下。首先,i =1,进入下一步,判断 i 这个值是否小于等于100,条件成立,进入下一步,打印输出当前的 i ,进入下一步,e += i,在赋值运算符里面我们了解到 c += a是等效于 c = c + a的。所以 num += i 就是等于 e = e + i 。因为e的值我们在前面定义了为0,所以这个等式就是用于计算他们每一次每个数相加的结果的。- print(’1-100的求和结果是%d’ % e):这个其实就很简单理解了,我们在前面也讲到过输出格式化,所以这个print的作用就是把这个e的值在循环结束的时候打印出来。**需求进阶**<br />1.计算 0 ~ 100 之间 所有 偶数 的累计求和结果<br />开发步骤1. 编写循环 确认 要计算的数字1. 添加 结果 变量,在循环内部 处理计算结果如果我们给它加个计算1~100以内所有偶数的和加上判断条件,我们应该怎么去写呢?代码如下:```bash# 0. 最终结果result = 0# 1. 计数器i = 0# 2. 开始循环while i <= 100:# 判断偶数if i % 2 == 0:print(i)result += i# 处理计数器i += 1print("0~100之间偶数求和结果 = %d" % result)
其实很简单,这一道题只是在原基础上加了一个 if 判断条件 判断这个 i 取余2是否为0 如果判断条件成立就输出 i ,然后再按照上面的流程把程序走完。
三、break 和 continue
- break:某一个条件满足后,退出循环,不再执行后续重复的代码
- continue:某一个条件满足后,不执行后续重复的代码,但是他不会退出当前循环,而是回到当前循环伊始
- break 和continue只针对当前循环有效
.
3.1 break
在循环过程中,某一个条件满足后,不希望再执行后续重复的代码,使用break可以退出循环,代码如下: ```bash i = 0
while i < 10:
# break 某一条件满足时,退出循环,不再执行后续重复的代码# i == 3if i == 3:breakprint(i)i += 1
print(“over”)
其实也可以这么理解,break 它在循环中 拿到它所需要的值时他就溜了,拿到自己想要的东西就,跑了罢工了。<br />**break 只针对当前所在循环有效。**<a name="xBT73"></a>#### 3.2 continue在循环过程中,某一条件满足后,不希望继续执行后面的代码但是又不想退出循环,就可以使用continue。也就是说在一整个循环里面,只有某些条件不需要执行循环代码,其他的条件都要执行。<br />最典型的跳七游戏,代码如下:```bashi = 0while i < 10:# 当 i == 7 时,不希望执行需要重复执行的代码if i == 7:# 在使用 continue 之前,同样应该修改计数器# 否则会出现死循环i += 1continue# 重复执行的代码print(i)i += 1
在这个过七游戏中可以看到其实也只是加了一条 if 的判断和 continue而已,if i == 7 i += 1 continue这一串代码代表的意思就是说如果当 i 这个变量的数值到达7的时候,i + 1,然后continue回到while i <= 10这一块,注意,这里的这个i += 1是必要的,如果不加的话会出现continue完了以后一直形成一个死循环,也就是 i 的数值会一直是7。
四、while循环嵌套
while嵌套简单来说就是while里面还有while,我们用一个具体的代码实例来分析一下,代码要求是使用循环嵌套打印5行依次递增的小星星,分别是四个代码。三个我做错的案例,还有一个成功的,我把他们一一剖析说一下。
4.1 打印小星星
i = 0while i <= 5:a = 0while a <= i:print('* ', end='')a += iprint('')i += 1
首先是第一个。这个代码的前半部分确实是没什么问题,问题就出在 在第二个while循环里面 我最后给计数器定义的是a += i 。由于前面的a和 i 的变量赋值都是0 所以会导致在程序走到 a += i 这里的时候呢出现死循环的现象,毕竟a += i 得出来的数字永远是0,a += i 计算完后得到a的值回到第二个循环里面判断a 是否 <= i 因为一直是0 所以就会在第二个循环这里进入死循环.
那在看完第一个代码后可能有些朋友会有些疑惑,那他既然是等于0一直循环,给他换个值不就完事了吗,我也这么想过,所以我把a 和 i 换成1又试了一下,结果还是出问题了=。=我们来看一下代码
i = 1while i <= 5:a = 1while a <= i:print('* ', end='')a += iprint('')i += 1

这一次的确实要比第一次理想很多嚯,毕竟把它从无限循环变成了5行星星列数有了是啊吧,但是不行啊,跟我们理想的依次递增的星星还是有蛮大的差距,不过也不碍事,先来分析一下代码。
首先呢 我们把他一开始的两个变量的赋值改了一下,改成了1,他输出的东西一下子就变成了一个能让你看的舒服的东西了,但是我们注意一下 他之所以会运行出这个样子,还是因为在 a += i 这里出了问题,当第一次的循环走完的时候 a 的值变成了2他折回循环判断那里,判断不正确 毕竟2不大于1 这个是个人都知道 然后跳出循环最后来到 i += 1这里,这第一次循环都没有错,第一行只打印了一个星星。等到了第二次循环的时候问题就来了,此时的 i 的值是等于2的 依次往下判断 i 小于等于5 成立,然后 a = 1判断出 a 的值是没有 i 的大的 条件成立,接着往下走打印输出一个星星并且不让它换行(end = ‘’),然后划重点 这里的 a += i 也就是说是1+2=3,然后循环回来第二个while那里判断,条件不成立,直接退出当前循环去到打印print(’’)和 i += 1那里。所以说在第二次循环里由于a的值的问题导致他只打印了一个星星。后面的都是同样的我就不废话了。所以我们可以得到问题是在a += i 这里。
我们接着看第三个代码:
i = 0while i <= 5:a = 0while a <= i:print('* ', end='')a += 1print('')i += 1

当我把 a += i 改成 a += 1后,嚯嚯 这个就牛x了 直接让我给整出来了,但是其实细心一点可以发现它竟然打印了6行星星=。=不过这个要比前面两个好解决,因为在前面说过了如果i <= 5的话确实会循环6次打印6次,所以我们把 i <= 5改成 i < 5 或则 把 i = 0 a = 0 这两个变量值都改成1 就完事了。来看下代码:

冲冲冲 终于成功了 所以大致在玩这个小星星的时候会遇到这么几个比较大的问题,仅是个人感觉而已,大佬请无视=。=
补充几个东西:
- 在默认情况下,print 函数输出内容之后,会自动在内容末尾增加换行
- 如果不希望末尾增加换行,可以在 print 函数输出内容的后面增加 , end=””
- 其中 “” 中间可以指定 print 函数输出内容之后,继续希望显示的内容
4.2 打印九九乘法表
这个就不废话了,大致流程跟刚刚那个星星都是一样的,就只是在print那里变了一下而已,直接看代码 ```bash i = 1 while i <= 9: a = 1 while a <= i:
print(‘’) i += 1print("%d * %d = %d" % (i, a, i * a), end='\t')a += 1
```

这里要说的东西就只有一个,就是这个end=’\t’里面的\t,这个是字符串中的转义字符,看一下表格就懂了
