09 循环


循环

本章内容

  • 程序的三大流程
  • while循环基本使用
  • break和continue
  • while循环嵌套

01.程序的三大流程

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

image-20220222180641968

02.while 循环基本使用

  1. 循环的作用就是让指定的代码重复的执行
  2. while循环最常用的应用场景就是让执行的代码按照指定的次数重复执行
  3. 需求―-打印5遍 Hello Python
  4. 思考--如果要求打印100遍怎么办?

2.1 while语句基本语法

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

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

注意:

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

第一个while循环

需求

  • 打印5遍Hello Python
# 1. 定义一个整数变量,记录循环次数
i = 1

# 2. 开始循环
while i <= 5:
    # 1> 希望在循环内执行的代码
    print("hello python")
    # 2> 处理计数器
    i = i + 1

死循环

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

#1. 定义一个整数变量,记录循环次数
i = 1

# 2. 开始循环
while i <= 5:
    # 1> 希望在循环内执行的代码
    print("hello python")

运行结果:

image-20220222183539010

2.2 赋值运算符

两个符号之间不能有空格

image-20220222184000277

2.3 Python 中的计数方法

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

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

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

利用此技术方法修改上述的代码:

# 1. 定义一个整数变量,记录循环次数
i = 0

# 2. 开始循环
while i < 5:
    # 1> 希望在循环内执行的代码
    print("hello python")
    # 2> 处理计数器
    i += 1

2.4 循环计算

在程序开发中,通常会遇到利用循环重复计算的需求

遇到这种需求,可以:

  1. while上方定义一个变量,用于存放最终计算结果
  2. 在循环体内部,每次循环都用最新的计算结果,更新之前定义的变量

需求

  • 计算0~100之间所有数字的累计求和结果
# 1.定义一个整数变量记录循环的次数及最终结果的变量
result = 0
i = 0
# 可以用一个循环简单的验证数字范围
"""
while i <= 100:
    print(i)
"""

# 2. 开始循环
while i <= 100:
    result += i
    
    # 处理计数器
    i += 1
print("求和的结果是%d" % result)

需求进阶

  • 计算0-100之间所有偶数的累计求和结果

开发步骤

  1. 编写循环确认要计算的数字
  2. 添加结果变量,在循环内部处理计算结果
# 1.定义一个整数变量记录循环的次数及最终结果的变量
result = 0
i = 0
# 2. 开始循环
while i <= 100:
    if i%2==0:
        result += i
    # 处理计数器
    i += 1
print("求和的结果是%d" % result)

03. break和continue

breakcontinue是专门在循环中使用的关键字

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

breakcontinue只针对当前所在循环有效

break运行原理:

image-20220222193153546

使用continue直接退出循环

break演练

i = 0
while i < 10:
    # `break`某一条件满足时,退出循环,不再执行后续重复的代码
    print(i)
    if i == 3:
        break
    i += 1
print("over")

程序运行结果:

image-20220222192630917

continue运行原理:

image-20220222192903184

使用continue后,不执行i=3后面的代码,而不等于3的继续执行

continue演练

注意continue造成的死循环现象,避免此现象发生

image-20220222193657125

i = 0

while i < 10:

    if i == 3:
        i += 1
        # 注意:在循环中,如果使用continue这个关键字
        # 在使用关键字前,需要确认循环的技术是否修改,否则可能会导致死循环
        continue
    print(i)
    i += 1

程序运行结果

image-20220222194149767

continue只针对当前所在循环有效

04. while循环嵌套

4.1 循环嵌套

  • while 嵌套就是:while 里面还有while
while 条件1:
	条件满足时,做的事情1
    条件满足时,做的事情2
    条件满足时,做的事情3
    ..(省略)...
	while 条件2:
		条件满足时,做的事情1
        条件满足时,做的事情
        2条件满足时,做的事情3
        ...(省略)...
	处理条件2
处理条件1

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

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

需求

  • 在控制台连续输出五行*,每一行星号的数量一次递减
*
**
***
****
*****

代码:

row=1

while row<=5 :

    print("*" * row)
    row += 1

第二部:使用循环嵌套打印小星星

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

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

#单纯的换行
print("*")

end=""表示向控制台输出内容结束之后,不会换行

举例:如果使用 print("*" * row,end=""),输出的图形为:

image-20220222200225565

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

开发步骤

1>完成5行内容的简单输出
2>分析每行内部的*应该如何处理?

方法一:

row = 1
while row <= 5:
    # 每一行要打印的星星就是和当前的行数是一致的
    print("*",end ="")
    i=row
    while i-1 > 0:
        print("*", end="")
        i -= 1
    print("")
    row +=1

方法二:

row = 1
while row <= 5:
    # 每一行要打印的星星就是和当前的行数是一致的
    # 增加一个小的循环,专门负责当前行中,每一列的星星显示
    # 1. 定义一个列计数器变量
    col=1
    # 2. 开始循环
    """
    1 1
    2 2
    3 3
    4 4
    5 5
    """
    while col <= row:
        #print("%d" % col)
        print("*",end="")
        col += 1

    #print("第 %d 行" % row)
    print("")#很重要!!!一行输入结束后,自动换行
    row +=1

第三步:九九乘法表

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

image-20220222204246906

开发步骤

  • 1.打印9行小星星

写代码时候注意,先写行(顺利输出9行)的代码,保证行的代码是正确的,再写列的代码

image-20220222204438106

代码:

image-20220222204805315
  • 2.将每一个*替换成对应的行与列相乘
row = 1
while row <= 9:
    col = 1
    while col <= row:
        result = col * row
        print("%d*%d=%d" % (col, row, result), end=" ")
        col += 1
    print("") 
    row += 1

字符串中的转义字符

  • \t 在控制台输出一个制表符,协助在输出文本时 垂直方向 保持对齐
  • \n 在控制台输出一个换行符

制表符的功能是在不使用表格的情况下在垂直方向按列对齐文本

用制表符,对上述代码进行修改

row = 1
while row <= 9:
    col = 1
    while col <= row:
        print("%d*%d=%d" % (col, row, col*row), end="\t")
        col += 1
    print("")  # 很重要!!!一行输入结束后,自动换行
    row += 1

程序运行结果:

image-20220222205615401

补充:

image-20220222205757914