当前位置: 首页 > news >正文

Python之 条件与循环(Python‘s Conditions and loops)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。

推荐:Linux运维老纪的首页,持续学习,不断总结,共同进步,活到老学到老
导航剑指大厂系列:全面总结 运维核心技术:系统基础、数据库、网路技术、系统安全、自动化运维、容器技术、监控工具、脚本编程、云服务等。
常用运维工具系列:常用的运维开发工具, zabbix、nagios、docker、k8s、puppet、ansible等
数据库系列:详细总结了常用数据库 mysql、Redis、MongoDB、oracle 技术点,以及工作中遇到的 mysql 问题等
懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂
非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

Python之 条件与循环
技能目标
- 掌握条件语句 if
- 掌握循环语句 while
- 掌握循环语句 for
- 掌握循环控制语句breakcontinue
在程序的执行过程中,经常要使用条件判断语句决定程序的执行流转,还要使用循环语
句进行相同代码的重复执行。它们在任何语言中都是非常重要的组成部分,熟练掌握才能更
好的控制程序。

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+1count 值变为 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 初始值为 1while 条件表达式是 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 语句的变量名没有使用 ij 这样没有意义的变量,而是
使用了 studentsubject 这种见名知意的变量名,使程序的可读性更强,避免了引用变量时
出现引用错误的情况。
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 个选项,分别用字母 NEQ 表示。
2N 表示输入新的用户名和密码。
3E 表示使用用户名和密码登录。
4Q 表示退出程序。
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 时程序退出,说明程序
是执行成功的。其它流程同学们也可以自行尝试,理解程序的控制方式。

相关文章:

Python之 条件与循环(Python‘s Conditions and loops)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…...

C++学习,多态纯虚函数

多态字面意思是多种形态&#xff0c;当类之间存在层次结构&#xff0c;并且类之间是通过继承时&#xff0c;就会用到多态。多态允许通过基类指针或引用来调用派生类中的成员函数。这种机制允许函数&#xff0c;在运行时根据对象的实际类型来确定执行哪个函数&#xff0c;从而实…...

飞速(FS)与西门子联合打造交换机自动化灌装测试生产线

2024年9月&#xff0c;备受信赖的信息通信技术&#xff08;ICT&#xff09;解决方案提供商飞速&#xff08;FS&#xff09;与工业自动化领域的领先企业西门子公司正式宣布&#xff0c;双方共同打造的ILTP&#xff08;智能灌装测试平台&#xff09;和自动化生产线将正式启动。此…...

Vue组合式API:setup()函数

1、什么是组合式API Vue 3.0 中新增了组合式 API 的功能&#xff0c;它是一组附加的、基于函数的 API&#xff0c;可以更加灵活地组织组件代码。通过组合式 API 可以使用函数而不是声明选项的方式来编写 Vue 组件。因此&#xff0c;使用组合式 API 可以将组件代码编写为多个函…...

Redis底层数据结构(详细篇)

Redis底层数据结构 一、常见数据结构的底层数据结构1、动态字符串SDS&#xff08;Simple Dynamic String&#xff09;组成 2、IntSet组成如何保证动态如何确保有序呢? 底层如何查找的呢? 3、Dict(dictionary)3.1组成3.2 扩容3.3 收缩3.4 rehash 4、ZipList连锁更新问题总结特…...

树和二叉树基本术语、性质

总结二叉树的度、树高、结点数等属性之间的关系&#xff08;通过王道书 5.2.3 课后小题来复习“二叉 树的性质”&#xff09; 树的相关知识 叶子结点的度0 层次默认从1开始 有些题目从0 开始也不要奇怪 常见考点1&#xff1a;结点数总度数&#xff0b;1 常见考点2&#xff1…...

FEDERATED引擎

入门 MySQL引擎主要有以下几种&#xff1a; MyISAM&#xff1a;这是MySQL 5.5.5之前的默认存储引擎&#xff0c;不支持事务、外键约束和聚簇索引&#xff0c;适用于读多写少的场景。InnoDB&#xff1a;这是MySQL 5.5.5之后的默认存储引擎&#xff0c;支持事务、外键约束、行级…...

Android NDK工具

Android NDK工具 Android NDK Crash 日志抓取及定位 NDK-STACK 定位 NDK Crash 位置 只要执行如下代码就行&#xff1a; adb logcat | ndk-stack -sym /yourProjectPath/obj/local/armeabi-v7aPS: 必须是带symbols的so&#xff0c;也就是在’\app\src\main\obj\local\下面的…...

使用 Docker 进入容器并运行命令的详细指南

Docker 是一款开源的容器化平台&#xff0c;它可以将应用程序和依赖环境打包到一个可移植的“容器”中&#xff0c;以保证应用不受运行环境的影响。使用 Docker 容器化应用后&#xff0c;有时需要进入容器内部执行一些命令进行调试或管理。 一、Docker 基础命令 在开始进入容…...

【人工智能】OpenAI最新发布的o1-preview模型,和GPT-4o到底哪个更强?最新分析结果就在这里!

在人工智能的快速发展中&#xff0c;OpenAI的每一次新模型发布都引发了广泛的关注与讨论。2023年9月13日&#xff0c;OpenAI正式推出了名为o1的新模型&#xff0c;这一模型不仅是其系列“推理”模型中的首个代表&#xff0c;更是朝着类人人工智能迈进的重要一步。本文将综合分析…...

Spring Boot-版本兼容性问题

Spring Boot 版本兼容性问题探讨 Spring Boot 是一个用于构建微服务和现代 Java 应用的流行框架&#xff0c;随着 Spring Boot 版本的更新和发展&#xff0c;它在功能、性能和安全性上不断提升。但与此同时&#xff0c;Spring Boot 的版本兼容性问题也逐渐成为开发者必须关注的…...

Java原生HttpURLConnection实现Get、Post、Put和Delete请求完整工具类分享

这里博主纯手写了一个完整的 HTTP 请求工具类,该工具类支持多种请求方法,包括 GET、POST、PUT 和 DELETE,并且可以选择性地使用身份验证 token。亲测可用,大家可以直接复制并使用这段代码,以便在自己的项目中快速实现 HTTP 请求的功能。 目录 一、完整代码 二、调用示例…...

如何微调(Fine-tuning)大语言模型?

本文介绍了微调的基本概念&#xff0c;以及如何对语言模型进行微调。 从 GPT3 到 ChatGPT、从GPT4 到 GitHub copilot的过程&#xff0c;微调在其中扮演了重要角色。什么是微调&#xff08;fine-tuning&#xff09;&#xff1f;微调能解决什么问题&#xff1f;什么是 LoRA&…...

wopop靶场漏洞挖掘练习

1、SQL注入漏洞 1、在搜索框输入-1 union select 1,2,3# 2、输入-1 union select 1,2,database()# &#xff0c;可以得出数据库名 3、输入-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schematest#&#xff0c;可以得出数据库中…...

探索Python的隐秘角落:Keylogger库的神秘面纱

文章目录 探索Python的隐秘角落&#xff1a;Keylogger库的神秘面纱背景&#xff1a;为何需要Keylogger&#xff1f;库简介&#xff1a;什么是Keylogger&#xff1f;安装指南&#xff1a;如何将Keylogger纳入你的项目&#xff1f;函数使用&#xff1a;5个简单函数的介绍与代码示…...

JAVA开源项目 校园管理系统 计算机毕业设计

本文项目编号 T 026 &#xff0c;文末自助获取源码 \color{red}{T026&#xff0c;文末自助获取源码} T026&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 管…...

Java--常见的接口--Comparable

String类型的compareTo方法&#xff1a; 在String引用中&#xff0c;有一个方法可以比较两个字符串的大小&#xff1a; 和C语言中是一样的&#xff0c;两个字符串一个字符一个去比较。 那么这个方法是怎么实现的呢&#xff1f; 其实就是一个接口&#xff1a;Comparable接口里…...

luogu基础课题单 入门 上

【深基2.例5】苹果采购 题目描述 现在需要采购一些苹果&#xff0c;每名同学都可以分到固定数量的苹果&#xff0c;并且已经知道了同学的数量&#xff0c;请问需要采购多少个苹果&#xff1f; 输入格式 输入两个不超过 1 0 9 10^9 109 正整数&#xff0c;分别表示每人分到…...

物理设计-物理数据模型优化策略

物理数据模型优化策略 1. 引言&#xff1a;物理设计的重要性​ 在数据库设计的生命周期中&#xff0c;物理设计是将逻辑模型转化为实际可执行的数据库架构的关键步骤。它直接关系到系统的性能、可扩展性和维护成本。一个优化的物理数据模型能够显著提升数据访问速度&#xff…...

产学研合作赋能产业升级新动能

在当今快速发展的时代&#xff0c;产业升级已成为经济持续增长的关键。而产学研合作模式正以其独特的优势&#xff0c;为产业升级注入新动能。 产学研合作&#xff0c;即将产业、学校与科研机构紧密结合起来。产业提供实际的需求和应用场景&#xff0c;学校培养专业的人才&…...

uniapp tabBar不显示

开发中发现某个页面不显示tabbar,而有的页面显示 需要在tabBar配置中添加需要展示的页面 刚开始我发现登录页面不展示tabbar,把登录页面的路径配置进去就会展示了...

论文阅读《Robust Steganography for High Quality Images》高质量因子图片的鲁棒隐写

TCSVT 2023 中国科学技术大学 Kai Zeng, Kejiang Chen*, Weiming Zhang, Yaofei Wang, Nenghai Yu, "Robust Steganography for High Quality Images," in IEEE Transactions on Circuits and Systems for Video Technology, doi: 10.1109/TCSVT.2023.3250750. 一、…...

node前端开发基本设置

加快下载源速度 要将 npm 切换到淘宝的源镜像&#xff0c;你可以按照以下步骤操作&#xff1a; 查看当前 npm 源&#xff1a; npm config get registry这个命令会显示当前使用的 npm 源地址&#xff0c;默认情况下它会是 https://registry.npmjs.org/。 切换到淘宝镜像&#…...

深入掌握:如何进入Docker容器并运行命令

感谢浪浪云支持发布 浪浪云活动链接 &#xff1a;https://langlangy.cn/?i8afa52 文章目录 查看正在运行的容器使用 docker exec 命令进入容器进入容器的交互式 shell在容器中运行命令 使用 docker attach 命令附加到容器检查容器日志退出容器从 docker exec 方式退出从 docke…...

把设计模式用起来(3)用不好的原因之时机不对

上一篇&#xff1a;《把设计模式用起来&#xff08;3&#xff09;——用不好的原因 之 实践不足》https://blog.csdn.net/nanyu/article/details/141939342 本篇继续讲设计模式用不好的常见原因&#xff0c;这是第二个&#xff1a;使用设计模式的时机不对。 二、时机不对 这里…...

【机器学习随笔】基于kmeans的车牌类型分类注意点

kmeans是无监督的聚类算法&#xff0c;可用于数据的分类。本文尝试用kmeans对车牌类型进行分类&#xff0c;记录使用过程中的注意点。 kmeans使用过程中涉及两个大部分&#xff0c;模型与分析。模型部分包括训练模型和使用模型&#xff0c;分析部分主要为可视化分析。两部分的主…...

matlab处理函数3

1. 直方图均衡化的 Matlab 实现 1.1 imhist 函数 功能&#xff1a;计算和显示数字数字图像的色彩直方图 格式&#xff1a;imhist(I,n) imhist(X,map) 说明&#xff1a;imhist(I,n) 其中&#xff0c;n 为指定的灰度级数目&#xff0c;缺省值为256&#xff1b;imhist(X…...

跨系统环境下LabVIEW程序稳定运行

在LabVIEW开发中&#xff0c;不同电脑的配置和操作系统&#xff08;如Win11与Win7&#xff09;可能对程序的稳定运行产生影响。为了确保程序在不同平台上都能正常且稳定运行&#xff0c;需要从兼容性、驱动、以及性能优化等多个方面入手。本文将详细介绍如何在不同系统环境下&a…...

开源项目低代码表单FormCreate中通过接口加载远程数据选项

在开源项目低代码表单 FormCreate 中&#xff0c;fetch 属性提供了强大的功能&#xff0c;允许从远程 API 加载数据并将其应用到表单组件中。通过灵活的配置&#xff0c;fetch 可以在多种场景下发挥作用&#xff0c;从简单的选项加载到复杂的动态数据处理。 源码地址: Github …...

k8s的搭建

一、安装环境 准备三台主机&#xff1a; 192.168.1.66 k8s-master 192.168.1.77 k8s-node01 192.168.1.88 k8s-node02 网段&#xff1a; Pod ⽹段 172.16.0.0/16 Service ⽹段 10.96.0.0/16 注&#xff1a;宿主机⽹段、Pod…...