循环
目标
• 程序的三大流程
• 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.列表进行元素插入和删除,尽量在列表尾部操作