循环

目标

 程序的三大流程

while 循环的基本使用

 break 和 continue

 while 循环嵌套

01. 程序的三大流程

• 在程序开发中,一共有三种流程方式:

  ①. 顺序——从上向下,顺序执行代码

  ②. 分支——根据条件判断,决定执行代码的分支

  ③. 循环——让特定代码重复执行

 

 02. while 循环的基本使用

循环的作用就是让指定的代码重复的执行

 while 循环最常用的应用场景就是 让执行的代码 按照 指定的次数 重复 的执行

 需求——打印5变hello python

 思考——如果要求打印100遍怎么办

2.1 while 语句的基本语法

初始条件设置——通常是重复执行的 计数器
while 条件(判断 计数器 是否达到 目标次数):
    条件满足时,做的事情1
    条件满足时,做的事情2
    条件满足时,做的事情3
    ...(省略)...
    处理条件(计数器 +1)

注意:

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

第一个while循环

需求

• 打印5遍Hello Python

# 打印5遍Hello python
# 1.定义一个整数变量,记录循环的次数
i = 1
# 2.开始循环
while i <= 5:
    # 希望在循环内之执行的代码
    print('Hello python 第%d次执行' % i)
    # 处理计数器
    i += 1
# 观察一下,循环结束后,计数器i的数值是多少
print("循环结束后i = %d" % i)

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

死循环:

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

 2.2 赋值运算符

在python中,使用 = 可以给变量赋值

 在算术运算时,为了简化代码的编写,python还提供一些列的与 算术运算符 对应的 赋值运算符

 注意:赋值运算符中间不能使用空格

运算符 描述 实例
= 简单的赋值运算符 c = a + b d的运算结果赋值给 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 循环计算

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

遇到这种需求,可以:

①. 在 while 上方定义一个变量,用于存放最终计算结果

②. 在循环体内部,每次循环都用 最近的计算结果,更新 之前定义的变量

需求:

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

# 计算0~100 之间所有数的累计求和结果
# 0. 定义最终结果的变量
result = 0
# 1. 定义一个整数变量记录循环的次数
i = 0

# 2.开始循环
while i <= 100:
    # 每一次循环,都让 result 这个变量和 i 这个计数器相加
    result += i
    # 处理计数器
    i += 1
print("0~100之间所有数的累加结果为%d:" % result)

需求进阶:

计算0~100之间所有偶数的和

开发步骤

①.编写循环确认要计算的数字

②.添加结果变量,在循环内部处理计算结果

result = 0
i = 0
while i < 101:
    if i % 2 == 0:
        result += i
    i += 1

print(result)

 03. break 和 continue

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

break 某一条件满足时,退出循环。

• continue 某一条件满足时,不执行当前循环,进行下一次循环

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

 break 演示:

i = 0
while i < 10:
    # break 某一条件满足时,退出循环
    if i == 5:
        break
    print(i)
    i += 1

print("over")

continue 演示

i = 0
while i < 10:
    if i == 5:
        # 注意:在循环中,如果使用continue 这个关键字
        # 在使用关键字之前,需要确认循环的计数是否修改,否则可能导致死循环
        i += 1
        continue
    print(i)
    i += 1

print("over")

04. while 循环嵌套

4.1 循环嵌套

while 嵌套就是:while理由还有while

while 条件1:
    条件满足时,做的事情1
    条件满足时,做的事情2
    条件满足时,做的事情3
    ...(省略)...
    while 条件2:
        条件满足时,做的事情1
        条件满足时,做的事情2
        条件满足时,做的事情3
        ...(省略)...
        处理条件2
    处理条件1

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

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

需求

在控制台连续输出5行* ,每一行星号的数量依次递增

*
**
***
****
*****

使用字符串 * 打印

row = 1
while row <= 5:
    print('*' * row)
    row += 1

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

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

   在默认情况下,print 函数输出内容之后,在自动在内容末尾增加一个换行

  • 如果不希望末尾增加换行,可以在print 函数输出内容后面增加 ,end=""

  • 其中 "" 中间可以指定print 函数输出内容之后,继续希望显示的内容

  • 语法格式如下:

# 向控制台输出内容结束之后,不会换行
print('*',end='')


# 单纯的换行
print("")

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

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

 需求:

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

*
**
***
****
*****

开发步骤

①. 完成5行内容的简单输出

②. 分析每行内部的 * 应该如何处理?

  • 每行显示的星星和当前所在的行数是一致的

  • 嵌套一个小的循环,专门处理每一行中 的星星显示

row = 1

while row <= 5:

    # 假设 python 没有提供字符串 * 操作
    # 在循环内部,再增加一个循环,实现每一行的 星星 打印
    col = 1

    while col <= row:
        print("*", end="")

        col += 1

    # 每一行星号输出完成后,再增加一个换行
    print("")

    row += 1

第3步. 九九乘法表

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

1x1=1    
1x2=2    2x2=4    
1x3=3    2x3=6    3x3=9    
1x4=4    2x4=8    3x4=12    4x4=16    
1x5=5    2x5=10    3x5=15    4x5=20    5x5=25    
1x6=6    2x6=12    3x6=18    4x6=24    5x6=30    6x6=36    
1x7=7    2x7=14    3x7=21    4x7=28    5x7=35    6x7=42    7x7=49    
1x8=8    2x8=16    3x8=24    4x8=32    5x8=40    6x8=48    7x8=56    8x8=64    
1x9=9    2x9=18    3x9=27    4x9=36    5x9=45    6x9=54    7x9=63    8x9=72    9x9=81

开发步骤:

 ①. 打印九行小星星

期望结果:

* 
* * 
* * * 
* * * * 
* * * * * 
* * * * * * 
* * * * * * * 
* * * * * * * * 
* * * * * * * * *

代码实现:

row = 1
while row<=9:
    col = 1
    while col <= row:
        print("*",end=' ')
        col += 1
    print('')
    row += 1

②. 将每一个 * 替换成对应的行与列相乘

# 定义行数
row = 1

# 最多打印九行
while row<=9:
    # 定义列数
    col = 1

    # 对多打印row列
    while col <= row:

        # end='' 表示输出结束后,不换行
        # '\t'  可以在控制台输出一个制表符,协助在输出的文本时对齐
        print("%dx%d=%d" %(col,row,row*col),end='\t')

        # 列数+1
        col += 1

    # 一行打印完成时换行
    print('')

    # 行数 +1
    row += 1

方法二:
for x in range(1,10):
for y in range(1,x+1):
print("{0}x{1}={2}".format(x,y,x*y),end='\t')
print()

字符串中的转义字符

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

    \n 在控制台输出一个换行符

制表符的功能是在不使用表格的情况下在 垂直方向 按列对齐文本
转义字符 描述
\\ 反斜杠符号
\' 单引号
\" 双引号
\n 换行
\t 横向制表符
\r 回车

 

循环代码优化

虽然计算机越来越快,内存越来越大,但是仍需要在追求性能。编写循环时,遵守下面三个原则可以提高运行效率,避免不必要的低效运算:

1.尽量减少循环内部不必要的计算

2.嵌套循环中,尽量减少内层循环的计算,尽可能向外提

3.局部变量查询较快,尽量使用局部变量

# 循环代码优化测试
import time
start = time.time()
for i in range(1000):
    result = []
    for x in range(10000):
        result.append(i*1000+x*1000)
end = time.time()
print("{0}".format(end-start))


start1 = time.time()
for a in range(1000):
    result=[]
    s = a*1000
    for b in range(10000):
        result.append(s+b*1000)
end1 = time.time()

print("{0}".format(end1-start1))

 其他优化手段

1.连接多个字符串用join(),而不使用+

2.列表进行元素插入和删除,尽量在列表尾部操作

posted @ 2020-11-27 18:02  小白自学python  阅读(144)  评论(0编辑  收藏  举报