python while循环 循环嵌套

Day4

循环

循环这个环节呢,算是个人认为比较难的一个环节,对于这个循环里面的循环步骤个人认为有点绕弯子,不过在本篇文章中,我个人也针对这些问题进行了个人的总结和方法的归纳。

一、 程序的三大流程

想要写好一串代码个人认为一定要知晓它其中的基本流程,只有脑子里有概念了,手上一定也不会差到哪里去。所以先总结一下程序的三大流程

  • 顺序:代码的执行顺序遵循从上到下的顺序,顺序执行代码
  • 分支:根据条件判断,决定执行代码的分支
  • 循环:让特定的代码,执行循环的操作

二、 while循环的基本使用

2.1 while语句基本语法

上面也说过了,循环就是让特定的代码执行循环的操作。while循环最常见的应用场景就是:让执行的代码按照指定的次数重复执行,代码演示如下

i = 1
while i < 5:
	print('hello word')
	i += 1

(以上代码就是利用while循环 循环打印了5次hello word)

注:while 语句以及缩进部分是一个 完整的代码块

针对这一串代码我们可以来分析一下每条代码对应的意思:

  • i = 1,这个 i 在这里其实我们可以把它理解为一个计数器,也就说记录我们这个while循环次数的一个变量
  • while i < 5: ,这一句的意思呢,我们可以理解为让这个 i 循环5次在第4次循环结束的时候退出循环,打印输出4次循环的结果。如果是 i <= 5,就是循环6次,在第5次的循环结束时退出循环,打印5次结果。
  • print就不多说了,打印输出()里面的内容
  • i += 1,这一句的意思就是在每一次循环结束的时候让 i 这个变量加 1 然后回到while i < 5这里进行判断。

假代码格式如下:

初始条件设置 —— 通常是重复执行的 计数器

while 条件(判断 计数器 是否达到 目标次数):
    条件满足时,做的事情1
    条件满足时,做的事情2
    条件满足时,做的事情3
    ...(省略)...
    
    处理条件(计数器 + 1

在写循环代码的时候可能会遇到死循环,遇到了也不需要担心,检查一下代码是否有添加计数器 + 1这样的操作可以有效地减少这种事情发生的概率。死循环由于程序员的原因,忘记在循环内部修改循环的判断条件,导致循环持续执行,程序无法终止!

2.2 赋值运算符
  • 在python中,用 = 可以给变量进行赋值
  • 在算术运算时,为了简化代码的编写,Python 还提供了一系列的 与 算术运算符 对应的 赋值运算符
  • 注:在进行赋值运算符的编写时,中间不能有空格。(正确示范:+= 错误示范:+ =)
    下表总结了赋值运算符
运算符描述实例
=简单的赋值运算符c = a + b 将 a + b 的运算结果赋值为 c
+=加法赋值运算符c += a 等效于 c = c + a
-=减法赋值运算符c -= a 等效于 c = c - a
*=乘法赋值运算符c *= a 等效于c = c * a
/=除法赋值运算符c /= a 等效于 c = c / a
//=取整除赋值运算符c //= a 等效于 c = c // a
%=取模(余数)赋值运算符c %= a 等效于 c = c % a
**=取幂赋值运算符c **= a 等效于 c = c ** a

注:在赋值运算符的书写过程中一定不能空格 不能有空格 不能有空格,虽然你加了空格系统也会报错给你=。=

2.3 Python 中的计数方法

常见的计数方式有两种,可以分别被称为:

  • 自然计数法:自然计数法(从 1 开始)—— 更符合人类的习惯,所以我叫他人类计数法。
  • 程序计数法:(从 0 开始)—— 几乎所有的程序语言都选择从 0 开始计数
    因此,大家在编写程序时,应该尽量养成习惯:除非需求的特殊要求,否则 循环 的计数都从 0 开始
2.4 循环计算

在程序开发中,通常会遇到利用循环重复计算的需求,那我们怎么去满足这个要求呢,看代码我们来分析一下:

1.计算 0 ~ 100 之间所有数字的累计求和结果

num = 0
i = 1
while i <= 100:
    print(i)
    num += i

    i += 1
print('%d' % num)

其实不难看出,这串代码跟我们一开始的那一串代码很相似,只是加了几个小东西而已,我们来一个个分析一下

  • 第一步,先不用急着看num = 0是啥东西,让我们先找到while循环的框架,也就是从i = 1开始到后面的 i += 1,这个框架里面定义了 i 循环的次数是小于等100次,也就是转100圈而已嘛哈哈
  • 第二步,找一下在这个基本循环的框架上加了啥东西。我们可以看到在这串代码里多了num = 1,num += i,print(’%d’ % num),它们分别代表的是:
    • num = 0:设置 num 这个变量去承接 i 循环了100次后的值相加的总和。
    • num += i:前面说过了,代码的执行顺序遵循从上到下的顺序,所以我们一步一步来走代码看一下。首先,i =1,进入下一步,判断 i 这个值是否小于等于100,条件成立,进入下一步,打印输出当前的 i ,进入下一步,num += i,在赋值运算符里面我们了解到 c += a是等效于 c = c + a的。所以 num += i 就是等于 num = num + i 。因为num的值我们在前面定义了为0,所以这个等式就是用于计算他们每一次每个数相加的结果的。
    • print(’%d’ % num):这个其实就很简单理解了,我们在前面也讲到过输出格式化,所以这个print的作用就是把这个num的值在循环结束的时候打印出来。

那如果我们给它加个计算1~100以内所有偶数的和这个条件,让它看起来牛逼点,我们应该怎么去写呢?代码如下:

num = 0
i = 1
while i <= 10:
    if i % 2 == 0:
        print(i)
        num += i

    i += 1
print('最后的和%d' % num)

其实很简单,这一道题只是在原基础上加了一个 if 判断条件 判断这个 i 取余2是否为0 如果判断条件成立就输出 i ,然后再按照上面的流程把程序走完。

三、break 和 continue

敲重点!break和continue是专门在循环中使用的关键字

  • break:某一个条件满足后,退出循环,不再执行后续重复的代码
  • continue:某一个条件满足后,不执行后续重复的代码,但是他不会退出当前循环,而是回到当前循环伊始
  • break 和continue只针对当前循环有效
3.1 break

在循环过程中,某一个条件满足后,不希望再执行后续重复的代码,使用break可以退出循环,代码如下:

i = 0
while i <= 10:

    if i == 9:
        break
    print(i)
    
    i += 1
print('over')

注:break只针对当前循环有效

3.2 continue

在循环过程中,某一条件满足后,不希望继续执行后面的代码但是又不想退出循环,就可以使用continue。也就是说在一整个循环里面,只有某些条件不需要执行循环代码,其他的条件都要执行。

最典型的跳七游戏,代码如下:

i = 0
while i <= 10:

    if i == 7:
        i += 1
        continue
    print(i)

    i += 1
print('over')

在这个过七游戏中可以看到其实也只是加了一条 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 = 0
while i <= 5:
    a = 0
    while a <= i:
        print('* ', end='')
        a += i
    print('')
    i += 1

首先是第一个。这个代码的前半部分确实是没什么问题,问题就出在 在第二个while循环里面 我最后给计数器定义的是a += i 。由于前面的a和 i 的变量赋值都是0 所以会导致在程序走到 a += i 这里的时候呢出现死循环的现象,毕竟a += i 得出来的数字永远是0,a += i 计算完后得到a的值回到第二个循环里面判断a 是否 <= i 因为一直是0 所以就会在第二个循环这里进入死循环。

那在看完第一个代码后可能有些朋友会有些疑惑,那他既然是等于0一直循环,给他换个值不就完事了吗,我也这么想过,所以我把a 和 i 换成1又试了一下,结果还是出问题了=。=我们来看一下代码

i = 1
while i <= 5:
    a = 1
    while a <= i:
        print('* ', end='')
        a += i
    print('')
    i += 1
#输出结果
* 
* 
* 
* 
* 

Process finished with exit code 0

这一次的确实要比第一次理想很多嚯,毕竟把它从无限循环变成了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 = 0
while i <= 5:
    a = 0
    while a <= i:
        print('* ', end='')
        a += 1
    print('')
    i += 1
* 
* * 
* * * 
* * * * 
* * * * * 
* * * * * * 

Process finished with exit code 0

当我把 a += i 改成 a += 1后,嚯嚯 这个就牛x了 直接让我给整出来了,但是其实细心一点可以发现它竟然打印了6行星星=。=(人当场都快没了哈哈)不过这个要比前面两个好解决,因为在前面说过了如果i <= 5的话确实会循环6次打印6次,所以我们把 i <= 5改成 i < 5 再看一下效果叭 QWQ~

i = 0
while i < 5:
    a = 0
    while a <= i:
        print('* ', end='')
        a += 1
    print('')
    i += 1
* 
* * 
* * * 
* * * * 
* * * * * 

Process finished with exit code 0

冲冲冲 终于成功了 所以大致在玩这个小星星的时候会遇到这么几个比较大的问题,仅是个人感觉而已,大佬请无视=。=

补充几个东西:

  • 在默认情况下,print 函数输出内容之后,会自动在内容末尾增加换行
  • 如果不希望末尾增加换行,可以在 print 函数输出内容的后面增加 , end=""
  • 其中 “” 中间可以指定 print 函数输出内容之后,继续希望显示的内容
4.2 打印九九乘法表

这个就不废话了,大致流程跟刚刚那个星星都是一样的,就只是在print那里变了一下而已,直接看代码

i = 1
while i <= 9:
    a = 1
    while a <= i:
        print("%d * %d = %d" % (i, a, i * a), end='\t')
        a += 1
    print('')
    i += 1
1 * 1 = 1	
2 * 1 = 2	2 * 2 = 4	
3 * 1 = 3	3 * 2 = 6	3 * 3 = 9	
4 * 1 = 4	4 * 2 = 8	4 * 3 = 12	4 * 4 = 16	
5 * 1 = 5	5 * 2 = 10	5 * 3 = 15	5 * 4 = 20	5 * 5 = 25	
6 * 1 = 6	6 * 2 = 12	6 * 3 = 18	6 * 4 = 24	6 * 5 = 30	6 * 6 = 36	
7 * 1 = 7	7 * 2 = 14	7 * 3 = 21	7 * 4 = 28	7 * 5 = 35	7 * 6 = 42	7 * 7 = 49	
8 * 1 = 8	8 * 2 = 16	8 * 3 = 24	8 * 4 = 32	8 * 5 = 40	8 * 6 = 48	8 * 7 = 56	8 * 8 = 64	
9 * 1 = 9	9 * 2 = 18	9 * 3 = 27	9 * 4 = 36	9 * 5 = 45	9 * 6 = 54	9 * 7 = 63	9 * 8 = 72	9 * 9 = 81	

Process finished with exit code 0

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

描述转义字符
反斜杠符号\
单引号\ ’
双引号\ "
换行\ n
制表符\ t
回车\ r
  • 7
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值