while嵌套死循环?

  • 在程序开发中,一共有三种流程方式:
    • 顺序 —— 从上向下,顺序执行代码
    • 分支 —— 根据条件判断,决定执行代码的 分支
    • 循环 —— 让 特定代码 重复 执行

二、while 循环基本使用

  • 循环的作用就是让 指定的代码 重复的执行
  • while 循环最常用的应用场景就是 让执行的代码 按照 指定的次数 重复 执行
  • 思考 —— 如果要求打印 100 遍怎么办?

 初始条件设置 —— 通常是重复执行的 计数器
 while 条件(判断 计数器 是否达到 目标次数):
 条件满足时,做的事情1
 条件满足时,做的事情2
 条件满足时,做的事情3
 
 处理条件(计数器 + 1)
  • while 语句以及缩进部分是一个 完整的代码块

 # 1. 定义重复次数计数器
 
注意:循环结束后,之前定义的计数器条件的数值是依旧存在的

由于程序员的原因,忘记 在循环内部 修改循环的判断条件,导致循环持续执行,程序无法终止!

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

  • 自然计数法(从 1 开始)—— 更符合人类的习惯
  • 程序计数法(从 0 开始)—— 几乎所有的程序语言都选择从 0 开始计数

因此,大家在编写程序时,应该尽量养成习惯:除非需求的特殊要求,否则 循环 的计数都从 0 开始

在程序开发中,通常会遇到 利用循环 重复计算 的需求
  1. while 上方定义一个变量,用于 存放最终计算结果
  2. 在循环体内部,每次循环都用 最新的计算结果更新 之前定义的变量
  • 计算 0 ~ 100 之间所有数字的累计求和结果
 # 计算 0 ~ 100 之间所有数字的累计求和结果
 # 0. 定义最终结果的变量
 # 1. 定义一个整数的变量记录循环的次数
 # 每一次循环,都让 result 这个变量和 i 这个计数器相加
 

  • 计算 0 ~ 100 之间 所有 偶数 的累计求和结果
  1. 编写循环 确认 要计算的数字
  2. 添加 结果 变量,在循环内部 处理计算结果

  • break 某一条件满足时,退出循环,不再执行后续重复的代码
  • continue 某一条件满足时,不执行后续重复的代码

  • 在循环过程中,如果 某一个条件满足后 再希望 循环继续执行,可以使用 break 退出循环
# break 某一条件满足时,退出循环,不再执行后续重复的代码
break 只针对当前所在循环有效

  • 在循环过程中,如果 某一个条件满足后 希望 执行循环代码,但是又不希望退出循环,可以使用 continue
  • 也就是:在整个循环中,只有某些条件,不需要执行循环代码,而其他条件都需要执行
# 当 i == 7 时,不希望执行需要重复执行的代码 # 在使用 continue 之前,同样应该修改计数器 continue # 跳到while循环的开始位置,循环中的后续代码不执行
  • 需要注意:使用 continue 时,条件处理部分的代码,需要特别注意,不小心会出现 死循环
continue 只针对当前所在循环有效

条件满足时,做的事情1 条件满足时,做的事情2 条件满足时,做的事情3 条件满足时,做的事情1 条件满足时,做的事情2 条件满足时,做的事情3

4.2 循环嵌套演练 —— 九九乘法表

第 1 步:用嵌套打印小星星

  • 在控制台连续输出五行 *,每一行星号的数量依次递增
 # 1. 定义一个计数器变量,从数字1开始,循环会比较方便
 

第 2 步:使用循环嵌套打印小星星

知识点print 函数的使用做一个增强

  • 在默认情况下,print 函数输出内容之后,会自动在内容末尾增加换行
  • 如果不希望末尾增加换行,可以在 print 函数输出内容的后面增加 , end=""
  • 其中 "" 中间可以指定 print 函数输出内容之后,继续希望显示的内容
 # 向控制台输出内容结束之后,不会换行
 
end="" 表示向控制台输出内容结束之后,不会换行

假设 Python 没有提供 字符串的 * 操作 拼接字符串

  • 在控制台连续输出五行 *,每一行星号的数量依次递增
  • 1> 完成 5 行内容的简单输出
  • 2> 分析每行内部的 * 应该如何处理?
    • 每行显示的星星和当前所在的行数是一致的
    • 嵌套一个小的循环,专门处理每一行中 的星星显示
# 在循环内部,再增加一个循环,实现每一行的 星星 打印 # 每一行星号输出完成后,再增加一个换行

第 3 步: 九九乘法表

需求 输出 九九乘法表,格式如下:

  • 1、打印 9 行小星星
  • 2、将每一个 * 替换成对应的行与列相乘
# end = "",表示输出结束后,不换行 # "\t" 可以在控制台输出一个制表符,协助在输出文本时对齐 # 一行打印完成的换行

遇到v不打印,跳出循环

遇到v不打印,返回循环

循环可以和else配合使用,else下方缩进的代码指的是当循环正常结束之后要执行的代码

条件成立重复执行的代码 循环正常结束之后要执行的代码

媳妇,我错了 媳妇,我错了 媳妇,我错了 媳妇原谅我了

媳妇,我错了 这遍说的不真诚
所谓else指的是循环正常结束之后要执行的代码,即如果是break终止循环的情况,else下方缩进的代码将不执行。
媳妇,我错了 这遍说的不真诚 媳妇,我错了 媳妇原谅我了
因为continue是退出当前一次循环,继续下一次循环,所以该循环在continue控制下是可以正常结束的,当循环结束后,则执行了else下方缩进的代码。

循环正常结束之后要执行的代码
所谓else指的是循环正常结束之后要执行的代码,即如果是break终止循环的情况,else下方缩进的代码将不执行。

print("循环正常结束之后执行的代码")

6.2.3 退出循环的方式

print("循环正常结束之后执行的代码")
遇到v不打印,跳出循环
print("循环正常结束之后执行的代码")
遇到v不打印,返回循环
循环正常结束之后执行的代码
因为continue是退出当前一次循环,继续下一次循环,所以该循环在continue控制下是可以正常结束的,当循环结束后,则执行了else下方缩进的代码。

  • 循环的作用:控制代码重复执行
 while 条件(判断 计数器 是否达到 目标次数):
 条件满足时,做的事情1
 条件满足时,做的事情2
  • while循环嵌套语法
  • break退出整个循环
  • continue退出本次循环,继续执行下一次重复执行的代码
    • else下方缩进的代码含义:当循环正常结束后执行的代码
    • break终止循环不会执行else下方缩进的代码
    • continue退出循环的方式执行else下方缩进的代码

什么是循环语句、死循环?

循环语句:将一段代码重复执行0、1或多次。

到底要重复运行多少次?以及我们如何设定循环语句的重复次数?

为了解决上面的问题于是就有了进入条件退出条件

进入条件:条件满足时进入循环。

退出条件:不符合条件退出循环。

一种特殊的循环:死循环

死循环:在编程中,一个无法靠自身的控制终止的循环称为"死循环"。死循环的出现有两种情况:

1、因程序需要刻意写的;2、因程序员的失误造成的。

第二种的死循环通常会造成比较严重的程序错误,甚至会因此而影响物理机。因此死循环的使用需要合理的设计


本文重要的三个循环语句:for、while、until

………………………………………………………………………………………………………………………

for语句的使用格式:

………………………………………………………………………………………………………………………

下面以一个例子看看for的具体作用

运行脚本0906-1结果如下

上面使用了第一种的整数列表中的第一种形式,这里如果是“1+2+...+n”这种形式那么{start..end}就不再适用,此时就只能使用$(seq start [[step]end])。下面再举一个例子说明

#以交互的方式输入一个正整数

#判断输入的数是否为空,为空则提示并退出

#判断输入的是否是正整数,若是则执行循环,若不是提示输入正整数并退出

#以交互的方式输入一个正整数

#判断输入的数是否为空,为空则提示并退出

#判断输入的是否是正整数,若是则执行循环,若不是提示输入正整数并退出

列表的glob与命令这两种就不再具体演示。大家感兴趣可以自己尝试下做个实验体会体会。

………………………………………………………………………………………………………………………

while语句使用格式:

CONDITION:循环控制条件;进入循环之前,先做一次判断;每一次循环之后会再次做判断;条件为“true”,则执行一次循环;直到条件测试状态为“false”终止循环;

因此:CONDTION一般应该有循环控制变量;而此变量的值会在循环体不断地被修正

………………………………………………………………………………………………………………………

#为了严谨起见,事先声明变量sum及i为整数型

执行脚本,查看其是否正确执行

1、不需要列表,因此可以大大节省内存空间,因为for如果列表很大会占用较多内容空间,对系统性能会造成影响,所以此时while的优越性就显现出来,它不需要占用很多内存空间,只需要两个变量的空间及做加法即可。

2、while需要修正体来不断修正变量,最终在符合退出条件时结束循环

………………………………………………………………………………………………………………………

until语句使用格式:

CONDITION:循环控制条件;进入循环之前,先做一次判断;每一次循环之后会再次做判断;条件为“false”,则执行一次循环;直到条件测试状态为“true”终止循环;

因此:CONDTION一般应该有循环控制变量;而此变量的值会在循环体不断地被修正;

until的用法同while,唯一的区别在于进入循环与退出循环的条件相反

以相同的例子来体会二者的区别

………………………………………………………………………………………………………………………

执行脚本,查看结果是否正确输出

通过比较while与until的唯一差别就在于判断条件。这两者其实算是同一种循环语句,只是进入及退出循环的条件正好相反。


循环控制语句(用于循环体中)

1、continue [N]:提前结束第N层的本轮循环,而直接进入下一轮判断;

………………………………………………………………………………………………………………………

示例:求100以内所有偶数之和;要求循环遍历100以内的所正整数

#求100以内所有偶数之和;要求循环遍历100以内的所正整数

#如果为奇数则跳过该循环

执行脚本,查看结果是否正确显示

之前我写这个脚本时是这么写的

#求100以内所有偶数之和;要求循环遍历100以内的所正整数

#如果为奇数则跳过该循环,直接进入下一轮判断后面的程序不再执行

这就是我个人由于对continue的理解不够准确而造成的死循环

由于continue是跳过其所在循环,直接进入下一轮判断,后面的语句都不再执行

当时没注意这点所以错误地把i++放在后面,这就导致若i起始值为奇数那么它就一直在重复执行

………………………………………………………………………………………………………………………

break的使用通常是与死循环同时出现的,下面来介绍如何创建死循环

………………………………………………………………………………………………………………………

示例:每隔3秒钟到系统上获取已经登录的用户的信息;如果docker登录了,则记录于日志中,并退出

#每隔3秒钟到系统上获取已经登录的用户的信息;如果docker用户登录,则记录于日志中,并退出脚本

为了验证该脚本,下面我们使用docker用户登陆

break语句和continue语句都可以位于各种循环体内,用于控制当前的循环流程。但,break语句是直接退出当前的循环结构,转向执行循环体后面的语句;而continue语句则只是跳过当前循环体中continue语句后面的语句,转向当前循环体的起始位置,重新执行下一次循环,并没有退出当前的循环结构。

这是两者最本质的区别:break跳出当前循环continue没有跳出当前循环


循环语句的特殊用法(while及for)

while循环的特殊用法(遍历文件的每一行)

………………………………………………………………………………………………………………………

示例:找出其ID号为偶数的所有用户,显示其用户名及ID号;

#找出其ID号为偶数的所有用户,显示其用户名及ID号

………………………………………………………………………………………………………………………

for循环的特殊格式

控制变量初始化:仅在运行到循环代码段时执行一次;

条件判断表达式:在什么条件下进行循环;

控制变量的修正表达式:每轮循环结束会先进行控制变量修正运算,而后再做条件判断;

示例:求100以内所正整数之和

#求100以内所正整数之和

运行脚本,查看结果是否正确

for的这种格式减少了代码量,看着更简洁,不过其限制是只适用于有数字出现的循环,若是对某目录下的所有文件进行某种循环的执行就不适应了。


在本文的最后再以一题体会下循环嵌套的神奇

我在刚刚接触循环嵌套时各种晕,循环嵌套不是没有目的的乱用,而是根据自己的需求有目的的使用,比如要打印99乘法表,开始要分析99乘法表的规律,分析后我们发现它横行是连续的,因此要用到一个循环(通常在遇到连续的内容都会用到循环)它的列也是连续的,因此又用到一个循环,而99乘法表又是由两个变化的量构成,综上我们就可以确定,需要使用两个变量,这两个变量分别要用到循环,而一个变量又受到另一个变量的限制,因此这个受限的变量就是被嵌套的主。问题分析到这里,我们解决这个问题要用到的工具都找出来了:两个变量,每个变量对应一个循环,同时一个变量受到另一个变量的限制,也就是说它需要在其循环内进行嵌套。

    下面就是靠自己去使用工具解决问题了。我相信大家这点应该都不成问题,问题就分析到这里。


    在本文结尾又介绍了while的特殊用法(遍历文件中的每一行),for的c语言格式。

至于什么时候用for什么时候用while需要自己在实际写脚本中细细比较,鉴于本人也是新手,这里就算想细说也只能望洋兴叹。

更多“在while循环中允许使用嵌套循环,但只能是嵌套while循环.”相关的问题

在C#中,下列对于嵌套循环的说法,正确的是()

A.for循环只能和for循环嵌套
B.在内层循环使用break可以退出两层的嵌套循环
C.循环最多只能嵌套三层

请帮忙给出正确答案和分析,谢谢!

以下关于switch语句的叙述中,错误的是( )。 A.switch语句允许嵌套使用 B.语句中必须有default部分,才能构成完整的switch语句 C.语句中各case与后面的常量表达式之间必须有空格 D.只有与break语句结合使用,switch语句才能实现程序的选择控制

下列选项中,不属于Python循环结构的是()

请帮忙给出正确答案和分析,谢谢!

在Python语言中,下列哪些说法不正确的是()。

A.Python语言的numpy库支持对向量、矩阵等数据概念的表示
B.Python语言语法中对缩进的要求不是强制的
D.Python语言中的while循环语句之中的循环条件不能直写为True,否则会造成死循环

此题为多项选择题。请帮忙给出正确答案和分析,谢谢!

编写一个主类Triangle,要求在它的main方法中写一个嵌套的for循环,完成下面的功能。 (1)通过嵌套的循环在屏幕上打印下列图案。(2)输入整数n值,完成n行图形的打印 1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1 1 2 3 4 5 4 3 2 1 1 2 3 4 5 6 5 4 3 2 1 请注意代码风格:类名、变量名的命名,以及必要注释等等; 请上传压缩后的源代码文件(为防上传失败,请同时把代码贴到文本框中)。 评分标准: 代码风格符号要求,类名、变量名的命名规范,以及有必要注释和缩进(2分) 使用了数组(2分); 正确完成第1问(4分); 正确完成第2问(4分)。

Python中的for语句可以在任意序列上进行迭代访问,例如列表、字符串和元组。

我要回帖

更多关于 c语言嵌套循环 的文章

 

随机推荐