💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
推荐:Linux运维老纪的首页,持续学习,不断总结,共同进步,活到老学到老
导航剑指大厂系列:全面总结 运维核心技术:系统基础、数据库、网路技术、系统安全、自动化运维、容器技术、监控工具、脚本编程、云服务等。
常用运维工具系列:常用的运维开发工具, zabbix、nagios、docker、k8s、puppet、ansible等
数据库系列:详细总结了常用数据库 mysql、Redis、MongoDB、oracle 技术点,以及工作中遇到的 mysql 问题等
懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂
非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨
技能目标
- 掌握条件语句 if
- 掌握循环语句 while
- 掌握循环语句 for
- 掌握循环控制语句break和continue
在程序的执行过程中,经常要使用条件判断语句决定程序的执行流转,还要使用循环语
句进行相同代码的重复执行。它们在任何语言中都是非常重要的组成部分,熟练掌握才能更
好的控制程序。
2.1 Python 条件判断
条件判断语句是指根据条件表达式的不同计算结果,使程序流转到不同的代码块。
Python 中的条件语句是 if 语句和 if else 语句。
2.1.1 if 条件语句
if 语句用于判断某个条件是否成立。如果成立,则执行语句内的程序;否则跳过 if 语句,
执行后面的内容,语法格式如下。
语法:
if 条件表达式:
语句块
语句块是一组程序语句,Python 的语法中没有用 java 等语言中的花括号表示一组语句,
而是采用空格缩进的方式表示一组语句。通常用 4 个空格表示一组语句,使程序员在编码
时减少了代码的工作量。示例 1 展示了 if 的使用。
示例 1:使用 if 语句判断输出相关信息。
import io
import sys
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf-8')
money = 100
if money > 99:
#冒号结尾
print ('贼有钱')
#缩进 4 个空格
print ('穷疯了')
#缩进 4 个空格
#输出结果
>>>
贼有钱
定义变量 money=100,使用 if 语句时条件表达式 money>99 的值是布尔值 True,执
行下面的 2 条打印语句,这 2 条打印语句都是前面有 4 个空格,表示它们是一个语句块。
下面通过一个比较复杂的示例,熟悉 if 语句的使用场景。
示例 2:接收学生的考试成绩,使用 if 语句判断。如果考试成绩大于等于 60 分,输出“合
格”。
# coding=utf-8
print ('请输入学生考试成绩')
score = int(input())
print (score >= 60)
if score >= 60:
#冒号结尾
print ('合格')
#4 个空格缩进
#输出结果
>>>
请输入学生考试成绩
80
True
合格
示例 2 中,通过变量 score 保存键盘输入的成绩 80。当 if 语句判断当成绩大于等于 60
时,输出“合格”。在 Python3 中,input 方法默认返回为 str 类型。如果想要输出 int 类型就
要改变输出类型为 int。
2.1.2 条件表达式与关系运算符
使用 if 语句时,后面要用到条件表示式和关系运算符,它们可以经过运算得到布尔值。
如前面示例的 score>=60 就是一个使用关系运算符“>=”的条件表达式,表示:如果 score
大于等于 60,则表达式的结果是 True(真);否则为 False(假)。条件表达式的语法如下。
语法:
操作数 关系运算符 操作数
关系运算符的前后 2 个数值,条件表达式的计算结果是布尔值。常用的关系运算符如
表 2-1 所示。
表 2-1 关系运算符
关系运算符 | 说明 |
== | 等于 |
!= | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
示例 3:关系运算符的运算结果。
>>> print (10 == 9)
False
>>> print (10 != 9)
True
>>> print (10 > 9)
True
>>> print (10 < 9)
False
>>> print (10 >= 9)
True
>>> print (10 <= 9)
False
条件表达式 10==9 是判断“==”运算符左右两侧的数值是否相等。因为 10 不等于 9,所
以,10==9 的运行结果是 False。
条件表达式 10!=9 是判断“!=”运算符左右两侧的数值是否不相等。因为 10 不等于 9,所
以,10!=9 的运行结果是 True。
其它的几种也是采用相同的方式进行判断并得到运算结果。
2.1.3 if-else 条件语句
if 语句还可以加上 else 关键字,根据条件判断,决定执行不同的语句块。当条件为真
时,执行语句块 1。当条件为假时,执行语句块 2,语法如下。
语法:
if 条件表达式:
语句块 1
else:
语句块 2
示例 4:接收学生的考试成绩,使用 if 语句判断。如果考试成绩大于等于 60 分,输出“合
格”;否则,输出“需要努力”。
print ('请输入学生考试成绩')
score = int(input())
if score >= 60 :
print ('合格')
else:
print ('需要努力')
#输出结果
>>>
请输入学生考试成绩
80
#执行第 1 遍,输入 80
合格
请输入学生考试成绩
50
#执行第 2 遍,输入 50
需要努力
第 1 遍执行时,输入 80,条件为 True,执行 print ‘合格’语句;第 2 遍执行时,输入
50,条件为 False,执行 print ‘需要努力’。if-else 语句是在根据条件决定程序需要执行的内
容时使用。语法上要注意 if 和 else 后面都是要使用冒号,它们前面的空格缩进是相同的,
表示它们是一个整体,而它们对应的语句块也是同级的,整体的代码看起来比其它语言更加
简洁易懂。
2.1.4 多重 if 语句
使用 if-else 语句通过条件判断使程序能够有 2 条执行路径,但有时还需要更多条路径进行处理,这时可以加入 elif 关键字处理。
语法:
if 条件表达式 1:
语句块 1
elif 条件表达式 2:
语句块 2
elif 条件表达式 3:
语句块 3
......
else:
语句块
当条件 1 成立时,执行条件 1 对应的语句块 1。当条件 2 或条件 3 成立时,则分别执行
对应的语句块。当前面的条件都不成功时,执行 else 对应的语句块。
示例 5:接收学生的考试成绩。如果考试成绩大于等于 90 分,则输出“优秀”。如果考
试成绩小于 90 分且大于等于 70 分,则输出“良好”。如果考试成绩小于 70 分且大于等于 60
分,则输出“合格”。如果考试成绩小于 60 分,则输出“需要努力”。
print ('请输入学生考试成绩')
score = int(input())
if score >= 90:
print ('优秀')
elif score >= 70:
print ('良好')
elif score >= 60:
print ('合格')
else:
print ('需要努力')
#输出结果
>>>
请输入学生考试成绩
100
优秀
请输入学生考试成绩
80
良好
请输入学生考试成绩
60
合格
请输入学生考试成绩
50
需要努力
使用键盘输入不同的值,执行了不同的语句块,输出不同的结果。if 语句中,else 关键
字是可选项,可以有也可以没有,需要根据程序的需要灵活掌握。
2.1.5 if 语句的常见问题
在使用 if 语句时,常常会出现下面一些问题。
(1)使用 if-elif-else 语句时,容易出现逻辑错误。因为条件是由上向下判断,如果条件
成立,下面的条件判断将不再执行。示例 5 的代码中,如果把条件表达式的顺序颠倒,比
如把 score>=60 放到 score>=90 之前,那么输入 100 时,首先判断的 score>=60 是成立
的,就不会再执行 score>=90 条件表达式,程序将无法按要求得到结果。以下代码就是逻
辑错误的典型情况:
score = int(input())
if score >= 60:
print ('合格')
elif score >= 70:
print ('良好')
elif score >= 90:
print ('优秀')
(2)if 语句中,语句块没有缩进也是容易犯的错误,如下代码直接报错:
score = int(input())
if score >= 90:
print ('优秀')
#没有缩进
编写代码时,要保证同级语句缩进的空格必须绝对一致。即使只有一个空格的差别,它
们已经表示不同的语句块了。如下代码所示:
score = int(input())
if score >= 90:
print ('优秀 1')
#没有缩进
print ('优秀 2')
#多了一个空格
第 2 条输出语句比第 1 条多了 1 个空格,执行时会报错。
(3)从其它程序设计语言转为 Python 的程序员,由于习惯经常会忘记表达式后面的冒
号,需要多练习熟悉语法。
2.2 Python 的循环
编写程序时经常有一些代码块需要重复运行,Python 提供了 while 和 for 语句实现循环
操作。
2.2.1 while 循环
下面讲解 while 语句的语法和使用,在理解 while 语句的基础上,会介绍 Python 字符
串的格式化输出和注释。
1. while 循环语句
while 循环可以根据条件表达式的判断结果,决定是否要重复执行语句块,语法如下。
语法:
while 条件表达式:
循环操作语句
循环的条件表达式后面也要使用冒号,然后缩进写循环操作语句。while 语句是先判断
后执行。即:先判断条件表达式是否成立,如果条件表达式的值为 True,则执行循环操作
语句。如果其值为 False,则跳出循环,执行 while 语句后面的语句。第 9 页 共 24 页
示例 6:当 count 值小于正整数 5 时,执行加 1 操作。当 count 大于等于 5 时,输出
count 的值。
count = 0
while (count < 5):
count = count + 1
print (count)
#输出结果
>>>
5
变量 count 初始值是 0,当 count<5 时,循环执行 count=count+1 语句。如第 1 轮循
环执行时,首先判断条件表达式 0<5,得到结果为 True。因为条件表达式 0<5 成立,则执
行 count=count+1 语句,count 值变为 1。此时示例 6 的 while 循环中没有其它语句同级,
则进入 while 语句第 2 轮循环。仍然是先判断条件表达式 1<5,条件依然成立,则重新再执
行 count=count+1,count 值变为 2。依此类推,当 count 等于 4 的时候,4<5 成立,执行
count=count+1 语句,count 变为 5。在进入第 6 轮循环之前,判断条件表达式 5<5 为 False,
退出 while 循环,最后的输出结果是 5。
下面再来看一个复杂的示例,加深对 while 循环的理解。
示例 7:输入 5 门课程的考试成绩,计算平均分并输出。
i= 1
sum = 0
while i <= 5:
#循环条件
print ('请输入第%d 门课程的考试成绩' % i)
#格式化,后面介绍
sum = sum + int(input())
#循环操作
i = i + 1
avg = sum / ( i - 1 )
print ('5 门课程的平均成绩是%d' % avg)
#格式化,后面介绍
#输出结果
>>>
请输入第 1 门课程的考试成绩
77
请输入第 2 门课程的考试成绩
请输入第 3 门课程的考试成绩
88
请输入第 4 门课程的考试成绩
56
请输入第 5 门课程的考试成绩
55
5 门课程的平均成绩是 66
示例 7 中,用于控制循环的变量 i 初始值为 1,while 条件表达式是 i <= 5,循环语句块
中 i = i + 1,说明循环语句块可以执行 5 次。其中 print ('请输入第%d 门课程的考试成绩' %
i)语句使用了格式化输出的形式,后面会介绍到。
2. 字符串的格式化输出
示例 7 中有 2 处使用了字符串的格式化输出,代码如下:
print ('请输入第%d 门课程的考试成绩' % i)
print ('5 门课程的平均成绩是%d' % avg)
字符串的格式化是将若干值插入带有“%”替代符的字符串中,从而可以动态地输出字符
串。字符串中的”%d”,表示插入的是一个整型数据,字符串后面的“% i”表示获取变量 i 的值。
字符串格式化中可以使用的替代符除了“%d”外,还有其他的替代符,如表 2-2 所示。
表 2-2 常用的替代符
替代符 | 描述 |
%d | 格式化整型 |
%s | 格式化字符串 |
%f | 格式化浮点数字格式化浮点数字 |
示例 8:常用替代符的使用情况。
num = 5
numStr = "5"
numF = 5.55
print ("第%d 名" % num)
print ("第%s 名" % numStr)
print ("浮点数是:%f" % numF)#输出结果
>>>
第 5 名
第 5 名
符数是:5.550000
字符串中使用对应的替代符,把相应的变量插入到了相应的位置。
字符串中还可以使用多个替代符,对应的变量使用元组即可,示例代码如下。
first = 1
second = 2
print ("第%d 名和第%d 名" % (first, second))
#输出结果
>>>
第 1 名和第 2 名
使用时要注意替代符和变量的顺序,位置不能放错;否则可能会出现类型不匹配的问
题。
还可以使用字典格式化多个值,示例代码如下:
num = {"first":1, "second":2}
print ("第%(first)d 名和第%(second)d 名" % num)
#输出结果
>>>
第 1 名和第 2 名
因为字典是无序的,所以使用字典时通过键获得与之对应的值。
3. Python 的注释
对于编写好的代码,经过一段时间之后,有可能会忘记代码的具体作用,所以代码中
要写一些注释文字,以便于日后阅读和修改代码。Python 中使用“#”开头表示注释,可以在
代码中添加注释。
示例 9:添加了注释的 Python 代码
# 输入 5 门课程的考试成绩,计算平均成绩
i= 1
# 初始化循环计数器 i
sum = 0
# 初始化总成绩变量 sum
while i <= 5:
# 重复执行 5 次接收考试成绩,求和的操作
print ('请输入第%d 门课程的考试成绩' % i)
sum = sum + int(input())
# 每门课程计入总成绩
i = i + 1
# 计数器 i 增加 1
avg = sum / ( i - 1 )
# 计算平均成绩
print ('5 门课程的平均成绩是%d' % avg)
# 输出平均成绩
对于“#+空格”开头的文字,Python 解释器不会做任何处理。而代码中的注释,可以提
高代码的可读性。
Python 注释有两种用法。一是,在行开头就使用“#”的称为单行注释;二是,紧随同行
代码,以“#”开头的称为行内注释。注释并不是在每一行都需要,只需要把不易读的代码做
注释即可。
4. while 循环嵌套
在 while 语句中,可以包含另一个 while 语句,即:使用 while 语句可以实现嵌套循环。
示例 10:使用 while 语句分别接收 2 名学生的 5 门课程考试成绩,计算并输出每个人
的平均成绩。
j = 1
#初始化外层循环计数器 j
prompt = '请输入学生姓名:'
while j <= 2:
#外层循环
sum = 0
#每个人的总成绩清零
i = 1
#初始化内层循环计数器 i
name = input(prompt)
while i <= 5:
#内层循环
print ('请输入第%d 门课程的考试成绩' % i)
sum = sum + int(input())
i = i + 1
avg = sum / ( i - 1 )
print ('%s 的 5 门课程的平均成绩是:%d' % (name,avg))
j = j+1print ('学生成绩输入完成')
示例 10 代码中,外层的 while 语句用于输入学生名字,用变量 j 控制循环次数,共 2
次。内层的 while 语句用于输入 5 门成绩,用变量 i 控制。也就是在外层循环输入一个名字
后,需要输入 5 门成绩,然后输出这名学生的成绩平均值,一共可以输入 2 名学生。
示例 10 中,Python 的代码结构非常清晰,当第 3 行外层循环执行时,从第 4 行到 13
行是一个整体执行。当第 7 行内层循环执行时,第 8 行到 10 行是一个整体执行,这种在循
环中还有循环的结构称为嵌套循环。嵌套循环是编写程序时经常使用的结构,嵌套可以有更
多层,但一般不会使用超过三层的嵌套。
注意:第 4 行的代码 sum = 0 放在了外层循环里,是因为每次输入一个人的 5 门成绩
后,sum 需要进行清零处理。如果不这样做,sum 的值就会保存,程序就无法达到预期的
目的。
2.2.2 for 循环
for 语句是另一种用于控制循环结构的方式。Python 的 while 是使用条件判断执行循环,
而 for 是使用遍历元素的方式进行循环。
1.for 循环的几种方式
for 循环的语法结构如下。
语法:
for 变量 in 集合:
语句块
Python 的 for 语句有以下几种使用方式。
(1)for 循环可以对字符串进行遍历,逐个获得字符串的每个字符,示例代码如下:
for letter in 'Python':
print ('Current letter:%s' % letter)
#输出结果
>>>
Current letter:P
Current letter:y
Current letter:t
Current letter:h
Current letter:o
Current letter:n
语句“for letter in 'Python':”的作用是对’Python’字符串的字符逐个遍历,把字符赋值给
变量 letter,然后执行 for 对应的语句块。如第一轮执行 for 语句时,letter 的值是“P”,执行
输出语句。然后返回第二轮执行 for 语句,letter 的值是“y”。依此类推,当执行完最后一个
字符“n”的语句块后,for 循环已经没有字符再可以获得,循环退出。
(2)for 循环可以对列表和元组进行遍历,示例代码如下:
fruits = ["西瓜","苹果","葡萄"]
for fruit in fruits:
print (fruit)
#输出结果
>>>
西瓜
苹果
葡萄
语句“for fruit in fruits:”的作用是遍历列表 fruits 中的元素,把元素赋值给 fruit,输出语
句每次输出一个水果。
(3)需要循环操作相同的内容时,可以用 for 循环和 range()函数结合使用,先看看range()
函数的作用,示例代码如下:
print (list(range(0,5)))
print (list(range(0,5,2)))
#输出结果
>>>
[0, 1, 2, 3, 4]
[0, 2, 4]
在 Python3 版本中,range() 函数返回的是一个可迭代对象(类型是对象),而不是列表
类型,所以打印的时候不会打印列表。list() 函数是对象迭代器,把对象转为一个列表。返
回的变量类型为列表,Range(0,5)输出由第一个参数 0 开始,默认每次加 1,当大于等于第
二个参数值时结束,所以列表中不包括第二个参数值。而 Range(0,5,2)语句中多了第三个
参数 2,其作用是每次加 2,最后的列表值是“[0,2,4]”。所以 range()函数的作用是创建一个
迭代对象,取值范围是从起始数字开始到结束数字之前的内容。
for 语句可以对列表进行遍历,所以,它可以对 range()函数的结果进行遍历。
示例代码如下:
for i in range(0,5):
print ('北京欢迎您')
#输出结果
>>>
北京欢迎您
北京欢迎您
北京欢迎您
北京欢迎您
北京欢迎您
range(0,5)是由 0-4 组成的列表,循环共执行了 5 遍,输出语句执行了 5 遍,变量 i 的
值就是每次遍历列表的元素值。
2.for 循环示例
示例 11:接收某个学生三门课程的考试成绩,计算输出平均成绩。
subjects = ('Python', 'MySQL', 'Linux')
sum = 0
for i in subjects:
print ('请输入 %s 考试成绩:'% i)
score = int(input())
sum +=score
# 与 sum = sum+score 等价
avg = sum / len(subjects)
print ('小明的平均成绩是 %d ' % avg)
#输出结果
>>>
请输入 Python 考试成绩:
11
请输入 MySQL 考试成绩:
请输入 Linux 考试成绩:
33
小明的平均成绩是 22
示例 11 中,subjects 列表保存三门课程的名称,使用 for 循环遍历课程列表 subjects,
接收考试成绩后使用变量 sum 累加,最后计算并输出平均成绩。
3.逻辑运算符
任何语言中都有逻辑表达式,它是用逻辑运算符和变量连接起来的表达式。表 2-3 是
Python 的逻辑运算符。
表 2-3 逻辑运算符
运算符 | 名称 | 描述 |
and | 逻辑与 | 如果两个操作数都为 True,则表达式值为 True |
or | 逻辑或 | 如果两个操作数中有一个为 True,则表达式值为 True |
not | 逻辑非 | 求反运算,如果操作数值为 True,则表达式值为 False,如果操作数值为 False,则表达式值为 True |
下面演示逻辑运算符的使用方法:
>>> print (not True)
False
>>> print (True and False)
False
>>> print (True or False)
True
not 是求反运算,所以 not True 的结果是 False;
and 是与运算,只要有一个值是 False,结果就是 False,所以(True and False)的结果
是 False;
or 是或运算,只要有一个值是 True,结果就是 True,所以(True or False)的结果是 True。
下面对成绩做一个有效性的判断,示例代码如下:
>>> score =180
>>> if(score<0 or score >100):
print ('成绩错误,不能小于 0 或大于 100')
成绩错误,不能小于 0 或大于 100
>>> if(not (score>=0 and score <=100)):
print ('成绩错误,不能小于 0 或大于 100')
成绩错误,不能小于 0 或大于 100
代码中,定义成绩变量 score 值是 180,使用了 2 种逻辑表达式进行判断。第 1 种是使
用 if(score<0 or score >100),作用是判断 score 小于 0 或者是大于 100 时条件成立。因为
180 大于 100,所以程序会输出错误提示。第 2 种是使用 if(not (score>=0 and score <=100)),
同时使用 not 和 and 进行的运算。首先,计算(score>=0 and score <=100),判断 score 值
是否在 1 到 100 之间。因为 score 值是 180,所以该表达式的结果是 False,再用 not 运算
符对它进行取反运算,最终得到的结果是 True。此时,if 语句的条件表达式成立,执行输出
语句。这 2 种方式的作用是相同的,但第 1 种方式更容易理解,实际编写代码时要根据情
况,选择容易理解的方式。
4.for 循环嵌套
与 while 循环一样,for 语句也可以使用嵌套的方式。
示例 12:使用 for 语句分别接收 2 名学生的 5 门课程考试成绩,计算并输出每个人的
平均成绩。
students =['小明','小张']
subjects = ('Python','MySQL','Linux')
for student in students:
#外层循环
sum = 0
for subject in subjects:
#内层循环
print ('请输入 %s 的 %s 考试成绩:'%(student,subject))
score = int(input())
sum +=score
avg = sum / len(subjects)
print ('%s 的平均成绩是 %d ' %(student,avg))
#输出结果
>>>
请输入 小明 的 Python 考试成绩:
11
请输入 小明 的 MySQL 考试成绩:
22
请输入 小明 的 Linux 考试成绩:
33
小明的平均成绩是 22
请输入 小张 的 Python 考试成绩:
33
请输入 小张 的 MySQL 考试成绩:
44
请输入 小张 的 Linux 考试成绩:
55
小张的平均成绩是 44
与 while 的方式基本相同,示例 12 代码的外层循环用于控制对学生进行遍历,内层循
环控制对课程遍历。需要注意:for 语句的变量名没有使用 i、j 这样没有意义的变量,而是
使用了 student、subject 这种见名知意的变量名,使程序的可读性更强,避免了引用变量时
出现引用错误的情况。
2.2.3 循环控制
使用 while 和 for 语句执行循环操作时,有可能需要改变循环的正常执行顺序,这时就
需要用循环控制语句实现,循环控制语句有 break 和 continue。
1.break 语句
在循环语句块中使用 break 语句,可以跳出整个循环。
示例 13:对输出平均成绩的代码进行修改,当成绩无效时,使用 break 退出循环。
students =['小明','小张']
subjects = ('Python','MySQL','Linux')
for student in students:
#外层循环
sum = 0
for subject in subjects:
#内层循环
print ('请输入 %s 的 %s 考试成绩:' % (student,subject))
score = int(input())
if(score < 0 or score > 100):
print ('输入的成绩需要大于 0 或小 100,循环退出')
break;
#break 退出内层循环
sum += score
avg = sum / len(subjects)
print ('%s 的平均成绩是 %d ' % (student,avg))
#输出结果
>>>
请输入 小明 的 Python 考试成绩:
111
输入的成绩需要大于 0 或小 100,循环退出
小明的平均成绩是 0
请输入 小张 的 Python 考试成绩:
示例 13 中的大部分代码是前面示例的代码,只是在第 8-10 行加入了对成绩有效性的
判断。如果不符合条件,则退出循环。当输入 111 时,条件表达式 score<0 or score>100
的值为 True,程序执行 8-10 行,break 退出 for 循环。
break 只和一个 for 循环对应,虽然有 2 层循环,但它只会结束离它最近的循环,这里
就是第 2 层 for 循环。第 2 层循环结束后,接着执行后面的第 12 行和 13 行代码,第 1 层
的循环照常遍历执行,开始输入第 2 个学生“小张”的成绩。
2.continue 语句
continue 的作用和 break 不同,它不是结束整个循环,而是跳过当前一轮循环体的剩
余语句,重新测试循环状态,准备进入下一轮循环。
示例 14:分别接收 2 个学生 3 门课程('Python','MySQL','Linux')的考试成绩,要求成绩
的取值范围是大于等于 0 且小于等于 100;计算并输出每个学生的平均成绩,示例 14 代码
如下。
students =['小明','小张']
subjects = ('Python','MySQL','Linux')
for student in students:
#第 1 层 for 循环
sum = 0
i = 0
while(i < len(subjects)):
#第 2 层 while 循环
print ('请输入 %s 的 %s 考试成绩:' % (student,subjects[i]))
score = int(input())
if(score < 0 or score > 100):
print ('输入的成绩需要大于 0 且小于 100,重新输入')
continue
#跳到下一轮循环
sum += scorei = i + 1
avg = sum / len(subjects)
print ('%s 的平均成绩是 %d ' % (student,avg))
#输出结果
>>>
请输入 小明 的 Python 考试成绩:
11
请输入 小明 的 MySQL 考试成绩:
111
输入的成绩需要大于 0 或小 100,重新输入
请输入 小明 的 MySQL 考试成绩:
22
请输入 小明 的 Linux 考试成绩:
33
小明的平均成绩是 22
请输入 小张 的 Python 考试成绩:
第 1 层使用的是 for 循环遍历学生,第 2 层使用 while 循环遍历成绩,使用 continue 是
跳到离它最近的循环的下一轮,也就是第 2 层的 while 循环的下一轮。因为执行 continue
后,第 13 行的 i= i+1 没有执行,而是重新又执行第 6 行的 while 循环,所以就是对当前课
程的成绩重新输入。当输入 MySQL 的成绩为 111 时,提示数据有误,然后又提示需要重新
输入 MySQL 成绩,代码更加健壮。
2.2.4 循环综合案例
下面通过 Python 语言实现用户登录示例,介绍循环语句在编程中的重要性。
1.需求描述
本案例的需求如下:
(1)显示操作的菜单,有 3 个选项,分别用字母 N、E、Q 表示。
(2)N 表示输入新的用户名和密码。
(3)E 表示使用用户名和密码登录。
(4)Q 表示退出程序。
2.编写功能
整体代码较多,为了演示清楚,采用分步完成功能的方式。
(1)首先输出菜单,输入字母 N、E、Q 后执行相应代码块,代码如下:
kgc ={}
#字典,用于保存用户名和密码
1 prompt = '''
(N)ew User Login
(E)ntering User Login
(Q)uit
Enter choice:'''
2 while True:
#整体的循环制,只有输入 q 时程序退出
3
choice = input(prompt).strip()[0].lower()
print ('\n--You picked : [%s]' % choice)
4
if choice not in 'neq':
print ('--invalid option,try again--')
else:
5
if choice=='n':
print ('input n')
elif choice=='e':
print ('input e')
else :
print ('quit')
6
break
变量 prompt 是显示菜单的内容,位置 3 的语句“input(prompt).strip()[0].lower()”的作用
是接收键盘输入的字符串,使用 strip()函数去掉字符串前后的空格,然后获取输入字符串的
第一个非空的字符。函数 lower()的作用是把字符变成小写字母,为后面的条件判断作准备。
位置 2 的 while True 表示后面的语句块会不停的重复执行。只有当用户输入字母“q”时,
才会执行位置 6 的 break 语句,退出 while 循环。
位置 4 是判断用户输入的字符是不是“n”、“e”、“q”。如果不是这三个字母,则程序输出
'--invalid option,try again--',重新返回位置 2 的代码,再次执行 while 循环。如果是“n”、“e”、
“q”中的任一个字母,则程序转向执行位置 5 的代码,进入条件表达式的判断,并根据条件
表达式的结果执行对应的功能。
(2)在上面代码的基础上编写 n 对应的功能,代码如下:
#省略前面的代码
if choice=='n':
prompt1 = 'login desired:'
1
while True:
name = raw_input(prompt1)
2
if name in kgc:
prompt1 ='--name taken,try another:'
3
continue
else:
4
break
pwd = input('password:')
kgc[name] = pwd
elif choice=='e':
#省略
当输入 n 时进行到代码块,位置 1 使用 while True 不停循环,位置 2 用于判断字典 kgc
中是不是已经存在了用户名,如果存在则执行位置 3 的 continue 语句继续下次循环,让用
户重新输入用户名;不存在则执行位置 4 的 break 语句,退出 while 循环。然后再输入对应
的密码,把用户名和密码保存到字典中。
(3)字符 e 对应的功能是登录,代码如下:
#省略前面的代码
elif choice=='e':
name = input('login:')
pwd = input('password:')
1
password = kgc.get(name)
2
if password == pwd:
print ('--welcome back--',name)
else:
print ('--login incorrect--')
else :
print ('quit')
break
#省略
进入字符 e 对应的功能输入用户名 name 和密码 pwd 后,在位置 1 处通过输入的用户
名在字典 kgc 中查找对应的密码 password。位置 2 用于判断字典中的密码和用户输入的密
码是否相同,如果相同,输出欢迎文字;如果不同,输出登录失败的文字。
(4)通过上面的步骤可以清楚的理解整个程序的执行流程,整体的代码如下:kgc = {}
prompt = '''
(N)ew User Login
(E)ntering User Login
(Q)uit
Enter choice:'''
while True:
choice = input(prompt).strip()[0].lower()
print ('\n--You picked : [%s]' % choice)
if choice not in 'neq':
print ('--invalid option,try again--')
else:
if choice=='n':
prompt1 = 'login desired:'
while True:
name = input(prompt1)
if name in kgc:
prompt1 ='--name taken,try another:'
continue
else:
break
pwd = input('password:')
kgc[name] = pwd
elif choice=='e':
name = input('login:')
pwd = input('password:')
password = kgc.get(name)
if password == pwd:
print ('--welcome back--',name)
else:
print ('--login incorrect--')
else :
print ('quit')
break
#输出结果
>>>
(N)ew User Login
(E)ntering User Login
(Q)uit
Enter choice:n
--You picked : [n]
login desired:marry
password:111
(N)ew User Login
(E)ntering User Login
(Q)uit
Enter choice:e
--You picked : [e]
login:marry
password:111
--welcome back-- marry
(N)ew User Login
(E)ntering User Login
(Q)uit
Enter choice:q
--You picked : [q]
quit
执行程序时输入 n 选择,输入新用户 marry 和密码 111;再输入 e,使用用户名 marry
和密码 111 登录,显示的是“--welcome back—marry”;最后输入 q 时程序退出,说明程序
是执行成功的。其它流程同学们也可以自行尝试,理解程序的控制方式。