说起循环,发一张图,不知道能不能勾起大家小时候的回忆。
循环就是让指定的代码重复地执行。
python 中的 while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务。
当要求你在页面上打印5遍“Hello Python”,你可以写5行 print代码,但是如果要求打印100行,1000行呢,这时就要使用 while 语句了。
一、while 语句基本语法
while 判断条件(condition):
执行语句(statements)……
执行语句可以是单个语句或语句块。
判断条件可以是任何表达式,任何非零、或非空(null)的值均为true。
while 语句执行的具体流程为:首先判断条件表达式的值,其值为真(True)时,则执行代码块中的语句,当执行完毕后,再回过头来重新判断条件表达式的值是否为真,若仍为真,则继续重新执行代码块...如此循环,直到条件表达式的值为假(False),才终止循环。
流程图如下
实例:打印 5 遍 Hello Python
# 1. 定义重复次数计数器
i = 1
# 2. 使用 while 判断条件
while i <= 5:
# 要重复执行的代码
print("Hello Python")
# 处理计数器 i
i = i + 1
这里特别强调一点,绝对不能忘记在循环内部增加修改循环的判断条件,否则就会出现的死循环现象。
再说明一个计数的习惯问题。人类的习惯都是从1开始计数,但几乎所有的程序中都习惯从0开始计数。
因此大家尽量养成习惯吧:除非是需求的特殊要求,否则循环的计数都从 0 开始。
二、赋值运算符
在 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个实例巩固下知识。
计算 0 ~ 100 之间所有数字的累计求和结果
# 定义最终结果的变量
result = 0
# 定义一个整数的变量记录循环的次数
i = 0
# 开始循环
while i <= 100:
# 每一次循环,都让 result 这个变量和 i 这个计数器相加
result += i
# 处理计数器
i += 1
print("0~100之间的数字求和结果 = %d" % result)
计算 0 ~ 100 之间 所有 偶数 的累计求和结果
# 定义一个记录最终结果的变量
result = 0
i = 0
while i <= 100:
# 判断变量 i 中的数值,是否是一个偶数
# 偶数 i % 2 == 0
# 奇数 i % 2 != 0
if i % 2 == 0:
# 当 i 这个变量是偶数时,才进行累加操作!
result += i
i += 1
print("0~100之间的偶数累加结果 = %d" % result)
三、循环中使用 else 语句
在 python 中,while … else 在循环条件为 false 时执行 else 语句块:
实例:
count = 0
while count < 5:
print("%d is less than 5" % count)
count = count + 1
else:
print("%d is not less than 5" % count)
以上实例输出结果为:
0 is less than 5
1 is less than 5
2 is less than 5
3 is less than 5
4 is less than 5
5 is not less than 5
四、循环的终止 break 和 continue
break 和 continue 是专门在循环中终止循环操作所使用的关键字。
break:某一条件满足时,退出整个循环,不再执行所有后续重复的代码。
实例
i = 0
while i < 10:
# break 某一条件满足时,退出循环,不再执行后续重复的代码
# i == 3
if i == 3:
break
print(i)
i += 1
print("over")
continue:某一条件满足时,跳出本次循环,不执行本次循环后续的代码,但不会终止整个循环。
实例
i = 0
while i < 10:
# 当 i == 7 时,不希望执行需要重复执行的代码
if i == 7:
# 在使用 continue 之前,同样应该修改计数器
# 否则会出现死循环
i += 1
continue
# 重复执行的代码
print(i)
i += 1
break 和 continue 只针对当前所在小循环有效,即如果出现循环嵌套,只能跳出 break 或 continue 所处的那个循环。
五、循环嵌套
循环嵌套就是 while 语句里面还有 while。
while 条件 1:
条件满足时,做的事情1
条件满足时,做的事情2
条件满足时,做的事情3
...(省略)...
while 条件 2:
条件满足时,做的事情1
条件满足时,做的事情2
条件满足时,做的事情3
...(省略)...
处理条件 2
处理条件 1
实例:输出五行 *,每一行星号的数量依次递增。
原来的方法:
row = 1
while row <= 5:
print("*" * row)
row += 1
循环嵌套的方法:
# 每行显示的星星和当前所在的行数是一致的
# 嵌套一个小的循环,专门处理每一行中列的星星显示。
row = 1
while row <= 5:
# 在循环内部,再增加一个循环,实现每一行的 星星 打印
col = 1
while col <= row:
print("*", end="")
col += 1
# 每一行星号输出完成后,再增加一个换行
print("")
row += 1
print的知识点
在默认情况下,print 函数输出内容之后,会自动在内容末尾增加换行。
如果不希望末尾增加换行,可以设置 print 函数的第2个参数 end 为空。
语法格式如下:
# 向控制台输出内容结束之后,不会换行
print("*", end="")
# 单纯的换行
print("")
实例:打印九九乘法表
# 定义起始行
row = 1
# 最大打印 9 行
while row <= 9:
# 定义起始列
col = 1
# 最大打印 row 列
while col <= row:
# end = "",表示输出结束后,不换行
# "\t" 可以在控制台输出一个制表符,协助在输出文本时对齐
print("%d * %d = %d" % (col, row, row * col), end="\t")
# 列数 + 1
col += 1
# 一行打印完成的换行
print("")
# 行数 + 1
row += 1
补充知识:转义符
ASCII 编码为每个字符都分配了唯一的编号,称为编码值。
在 Python 中,一个 ASCII 字符除了可以用它的实体(也就是真正的字符)表示,还可以用它的编码值表示。这种使用编码值来间接地表示字符的方式称为转义字符(Escape Character)。
转义字符以\0或者\x开头,以\0开头表示后跟八进制形式的编码值,以\x开头表示后跟十六进制形式的编码值,Python 中的转义字符只能使用八进制或者十六进制。具体格式如下:
\0dd
\xhh
# dd 表示八进制数字,hh 表示十六进制数字。
直接接使用 ASCII 码记忆不方便,也不容易理解,所以,针对常用的控制字符,又定义了简写方式,完整的列表如下。
转义字符 | 描述 |
---|---|
\\ | 反斜杠符号 |
\' | 单引号 |
\" | 双引号 |
\n | 换行符,将光标位置移到下一行开头 |
\t | 水平制表符,也即 Tab 键,一般相当于四个空格 |
\r | 回车符,将光标位置移到本行开头 |
\b | 退格(Backspace),将光标位置移到前一列 |