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

news2024/11/16 15:38:03

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

推荐: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 时程序退出,说明程序
是执行成功的。其它流程同学们也可以自行尝试,理解程序的控制方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2133762.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux环境下手动安装mysql

没想到兜兜转转这么些年&#xff0c;今天申请个云服务器用来搭建求生2服务器&#xff0c;先用mysql来测试&#xff0c;结果还是花了相当久的时间。 基本所有单节点部署应用到linux环境&#xff0c;都三个流程&#xff1a; 1 下载安装包 2 解压修改配置文件 3 运行启动脚本 我们…

Idea 中的一些配置

配置 javap jdk 自带的 javap 可以用来查看字节码信息。 配置过程&#xff1a; 打开设置&#xff0c;定位到 Tools&#xff0c;External Tools新建项&#xff0c;Program 中填 javap 的路径Argument 中填 -c $FileClass$Working directory 中填 $OutputPath$ Argument 中也…

【有啥问啥】复习变分下界即证据下界(Evidence Lower Bound, ELBO):原理与应用

复习变分下界即证据下界&#xff08;Evidence Lower Bound, ELBO&#xff09;&#xff1a;原理与应用 变分下界&#xff08;Variational Lower Bound&#xff09;&#xff0c;也称为“证据下界”&#xff08;Evidence Lower Bound, ELBO&#xff09;&#xff0c;是概率模型中的…

Golang | Leetcode Golang题解之第403题青蛙过河

题目&#xff1a; 题解&#xff1a; func canCross(stones []int) bool {n : len(stones)dp : make([][]bool, n)for i : range dp {dp[i] make([]bool, n)}dp[0][0] truefor i : 1; i < n; i {if stones[i]-stones[i-1] > i {return false}}for i : 1; i < n; i {…

产品探秘|开物——面向AI原生和云原生网络研究的首选科研平台

在当今高速发展的信息技术领域&#xff0c;特别是对于那些致力于前沿科技探索与实践的高校而言&#xff0c;拥有一款能够支持复杂网络业务研究与开发的平台至关重要。开物™数据网络开发平台&#xff08;Data Network Development Platform&#xff0c;简称DNDP&#xff09;&am…

el-input 只能输入数字和一个小数点,或者只能输入正整数

只能输入框只能输入正整数&#xff0c;输入同时禁止了以0开始的数字输入&#xff0c;防止被转化为其他进制的数值。 下面为案例&#xff1a; <!-- 不能输入零时--> <input typetext oninput"valuevalue.replace(/^(0)|[^\d]/g,)"><!-- 能输入零时-…

const 声明变量 报错Missing initializer in const declaration

近日用const 声明一个变量发现一个问题&#xff0c;如果声明的同时没有赋值&#xff0c;就会报错Missing initializer in const declaration 以下是分别以const、let、var声明显示的结果 const 方式声明 const a null const b const c 1 const d 2 const e false console…

Java | Leetcode Java题解之第404题左叶子之和

题目&#xff1a; 题解&#xff1a; class Solution {public int sumOfLeftLeaves(TreeNode root) {if (root null) {return 0;}Queue<TreeNode> queue new LinkedList<TreeNode>();queue.offer(root);int ans 0;while (!queue.isEmpty()) {TreeNode node que…

c++206 友元类

#include<iostream> using namespace std; class A { public://声明的位置 和public private无关friend void modifyA(A* pA, int _a);//函数modifyA是A的好朋友A(int a, int b){this->a a;this->b b;}int getA(){return this->a;} private:int a;int b; };vo…

频带宽度固定,如何突破数据速率的瓶颈?

目录 目录 引言 信道 频带宽度 信噪比 信噪比的重要性 影响信噪比的因素 码元 码元的特点&#xff1a; 码元与比特的关系&#xff1a; 码元的作用&#xff1a; 码元的类型&#xff1a; Question 类比解释&#xff1a; 技术解释&#xff1a; 引言 在现代通信系统中…

Python | Leetcode Python题解之第404题左叶子之和

题目&#xff1a; 题解&#xff1a; class Solution:def sumOfLeftLeaves(self, root: TreeNode) -> int:if not root:return 0isLeafNode lambda node: not node.left and not node.rightq collections.deque([root])ans 0while q:node q.popleft()if node.left:if is…

Tomcat_使用IDEA开发javaWeb工程并部署运用

目录 1.配置文件 点击file projectStructure 配置SDK和language level的语言版本一致。apply然后ok。 2. 然后点击web-all创建一个moudle叫做demo02-web02。 3.这仅仅是一个java的目录结构&#xff0c;我们需要把他转换成javaweb的结构。所以我们需要添加web资源组件。右…

【STM32】独立看门狗(IWDG)原理详解及编程实践(下)

这篇文章详细讲解独立看门狗的编程实践代码。关于独立看门狗的原理及配置可以看上一篇文章。 【STM32】独立看门狗&#xff08;IWDG&#xff09;原理详解及编程实践&#xff08;上&#xff09;-CSDN博客 目录 1、 初始化 IWDG 2. 配置 IWDG 3. 喂狗 4. 处理看门狗复位 5、完…

Google推出Data Commons解决AI“幻觉”

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

SQL进阶技巧:如何将字符串数组清洗为简单map结构? | translate + regexp_replace方法

目录 0 场景描述 1 数据准备 2 问题分析 2.1 方法1 特征法-通用解法 2.2 方法2枚举法(不通用) 3 小结 ~~END~~ 如果觉得本文对你有帮助,那么不妨也可以选择去看看我的博客专栏 ,部分内容如下: 数字化建设通关指南专栏原价99,现在活动价29.9,按照阶梯式增长,直到恢…

C++面试3

一、常用设计模式 https://blog.csdn.net/m0_71530237/article/details/141140118?spm1001.2014.3001.5501 二、死锁以及解决方式&#xff1f; 死锁&#xff1a;一种常见的并发问题&#xff0c;发生在多个进程或线程因为竞争资源而陷入相互等待的状态&#xff0c;导致这些进…

199.二叉树的右视图(两种方法实现)

一、题目 思路1 对于一个任意给定的二叉树&#xff0c;我们不能确定二叉树的形状&#xff1b; 设计一个每次遍历二叉树的右子树的深度优先遍历&#xff0c;这样深度优先遍历中每层遍历到的第一个结点就是最右边的结点&#xff1b; 代码实现大致分为四部分&#xff1a; 哈希…

error:Framework ‘Pods_xxx‘ not found解决方法

报错“Framework Pod_xxx.framework找不到”通常意味着你的项目正在尝试链接或使用一个名为Pod_xxx.framework的框架&#xff0c;但是这个框架并没有被正确地添加到项目中。 解决办法&#xff1a; 1.点击项目蓝色图标&#xff0c;在左侧Target部分&#xff0c;点击你当前的项…

Maven从入门到精通(三)

一、Settings 配置 settings.xml 用来配置 maven 项目中的各种参数文件&#xff0c;包括本地仓库、远程仓库、私服、认证等信息。 全局 settings、用户 setting、pom 的区别&#xff1a; 全局 settings.xml 是 maven 的全局配置文件&#xff0c;一般位于 ${maven.home}/conf…

如何进行大模型训练和微调?(实战)

1、在项目中&#xff0c;如果prompt和function calling足够好&#xff0c;尽量不要微调&#xff0c;节约成本。 以下是针对function calling的slot&#xff0c;评估准确率&#xff08;识别准确度&#xff09;、召回率&#xff08;全面率&#xff09;&#xff0c;F1值。 从中可以…