《100天精通Python——基础篇 2025 第4天:掌握条件判断与循环语句,构建程序逻辑核心》

发布于:2025-05-01 ⋅ 阅读:(19) ⋅ 点赞:(0)

本篇文章将带你深入理解 Python 中的流程控制语句,重点讲解条件判断(if 语句)以及两种主要的循环结构(while 和 for 循环)。这些控制语句是构建程序逻辑的核心,能够让你的代码具备 "思考""反复执行" 的能力。本文还会通过丰富的代码示例,演示流程控制在实际场景中的应用,帮助你建立清晰的逻辑思维。

一、程序结构

计算机在解决某个具体问题时,主要有3种情形,分别是顺序执行所有的语句、选择执行部分语句和循环执行部分语句。程序设计中的3种基本结构为顺序结构、选择结构和循环结构。这3种结构的执行流程如下图所示:
在这里插入图片描述
其中,第一幅图是顺序结构的流程图,编写完毕的语句按照编写顺序依次被执行;第二幅图是选择结构的流程图,它主要根据条件语句的结果选择执行不同的语句;第三幅图是循环结构的流程图,它是在一定条件下反复执行某段程序的流程结构,其中,被反复执行的语句称为循环体,决定循环是否终止的判断条件称为循环条件。本文之前编写的多数实例采用的都是顺序结构。例如,定义一个字符串类型的变量,然后输出该变量,代码如下:

name = 'Amo'
print(name)

选择结构和循环结构的应用场景:看过金庸的小说《射雕英雄传》的人,可能会记得,黄蓉与瑛姑见面时,曾出过这样一道数学题:"今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问几何?" 解决这道题,有以下两个要素:

  • 需要满足的条件是一个数,除以三余二,除以五余三,除以七余二。这就涉及条件判断,需要通过选择语句实现。
  • 依次尝试符合条件的数。这就需要循环执行,需要通过循环语句实现。

二、选择结构

2.1 最简单的if语句

Python 中使用 if 关键字来组成选择语句,简单的语法格式如下:

if 表达式:
   语句块

其中,表达式可以是一个单纯的布尔值或变量,也可以是比较表达式或逻辑表达式(例如:a > b and a != c),如果表达式为真,则执行 "语句块";如果表达式的值为假,就跳过 "语句块",继续执行后面的语句,这种形式的 if 语句相当于汉语里的关联词语 "如果……就……",其流程图如下图所示:
在这里插入图片描述
示例:判断一个数是否为偶数。

num = int(input('请输入一个数字:'))
# if num % 2 == 0:
if num & 1 == 0:
    print(f'{num}是偶数!')

2.2 if…else语句

如果遇到只能二选一的条件,例如,某大学毕业生到知名企业实习期满后留用,现在需要选择 Python 开发的方向,示意图如下图所示:
在这里插入图片描述
Python 中提供了 if…else 语句解决类似问题,其语法格式如下:

if 表达式:
    语句块1
else:
    语句块2

使用 if…else 语句时,表达式可以是一个单纯的布尔值或变量,也可以是比较表达式或逻辑表达式,如果满足条件,则执行 if 后面的语句块,否则,执行 else 后面的语句块,这种形式的选择语句相当于汉语里的关联词语 "如果……否则……",其流程图如下图所示:
在这里插入图片描述
示例:验证瑛姑给出的答案是否正确。

print("今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问几何?")
number = int(input("请输入瑛姑给出的数:"))  # 输入一个数
if number % 3 == 2 and number % 5 == 3 and number % 7 == 2:  # 判断是否符合条件
    print(number, "符合条件")
else:  # 不符合条件
    print(number, "不符合条件")

注意: 在使用 else 语句时,else 一定不可以单独使用,它必须和关键字 if 一起使用。

2.3 if…elif…else语句

大家平时在网上购物时,通常都有多种付款方式供大家选择,如下图所示:
在这里插入图片描述
上图中提供了3种付款方式,这时用户就需要从多个选项中选择一个。在开发程序时,如果遇到多选一的情况,则可以使用 if…elif…else 语句,该语句是一个多分支选择语句,通常表现为 "如果满足某种条件,就会进行某种处理,否则,如果满足另一种条件,则执行另一种处理……"。 if…elif…else 语句的语法格式如下:

if 表达式1:
    语句块1
elif 表达式2:
    语句块2
elif 表达式3:
    语句块3else:
    语句块n

使用 if…elif…else 语句时,表达式可以是一个单纯的布尔值或变量,也可以是比较表达式或逻辑表达式,如果表达式为真,执行语句;而如果表达式为假,则跳过该语句,进行下一个 elif 的判断,只有在所有表达式都为假的情况下,才会执行 else 中的语句。if…elif…else 语句的流程如下图所示:
在这里插入图片描述
注意: if 和 elif 都需要判断表达式的真假,而 else 则不需要判断;另外,elif 和 else 都必须与 if 一起使用,不能单独使用。

示例:使用 if…elif…else 多分支语句实现根据用户输入的玫瑰花的朵数输出其代表的含义,代码如下:

print("在古希腊神话中,玫瑰集爱情与美丽于一身,所以人们常用玫瑰来表达爱情。")
print("但是不同朵数的玫瑰花代表的含义是不同的。")
# 获取用户输入的朵数,并转换为整型
number = int(input("输入您想送几朵玫瑰花,小默会告诉您含义:"))
if number == 1:  # 判断输入的数是否为1,代表1朵
    # 如果等于1则输出提示信息
    print("1朵:你是我的唯一!")
elif number == 3:  # 判断是否为3朵
    print("3朵:I Love You!")
elif number == 10:  # 判断是否为10朵
    print("10朵:十全十美!")
elif number == 99:  # 判断是否为99朵
    print("99朵:天长地久!")
elif number == 108:  # 判断是否为108朵
    print("108朵:求婚!")
else:
    print("小默也不知道了!可以考虑送1朵、3朵、10朵、99朵或108朵呦!")

使用 if 选择语句时,尽量遵循以下原则:

  1. 当使用布尔类型的变量作为判断条件时,假设布尔型变量为 flag,较为规范的格式如下:
    if flag:  # 表示为真
    if not flag:  # 表示为假
    
    不符合规范的格式如下:
    if flag == True:
    if flag == False:
    
  2. 使用 "if 1 == a:" 这样的书写格式可以防止错写成 "if a = 1:" 这种形式,从而避免逻辑上的错误。

2.4 if语句的嵌套

前面介绍了3种形式的 if 选择语句,这3种形式的选择语句之间都可以互相嵌套。在最简单的 if 语句中嵌套 if…else 语句,形式如下:

if 表达式1:
    if 表达式2:
        语句块1
    else:
        语句块2

if…else 语句中嵌套 if…else 语句,形式如下:

if 表达式1:
    if 表达式2:
        语句块1
    else:
        语句块2
else:
    if 表达式3:
        语句块3
    else:
        语句块4

场景描述:国家质量监督检验检疫局发布的《车辆驾驶人员血液、呼气酒精含量阈值与检验》中规定:车辆驾驶人员血液中的酒精含量小于 20mg/100ml 不构成饮酒驾驶行为;酒精含量大于或等于 20mg/100m、小于 80mg/100ml 为饮酒驾车;酒精含量大于或等于 80mg/100ml 为醉酒驾车。现编写一段 Python 代码判断是否酒后驾车。

print("为了您和他人的安全,严禁酒后开车!")
proof = int(input("请输入每100毫升血液的酒精含量:"))  # 获取用户输入的酒精含量,并转换为整型
if proof < 20:  # 酒精含量小于20毫克,不构成饮酒行为
    print("您还不构成饮酒行为,可以开车,但要注意安全!")
else:  # 酒精含量大于或等于20毫克,已经构成饮酒驾车行为
    if proof < 80:  # 酒精含量小于80毫克,达到饮酒驾驶标准
        print("已经达到酒后驾驶标准,请不要开车!")
    else:  # 酒精含量大于或等于80毫克,已经达到醉酒驾驶标准
        print("已经达到醉酒驾驶标准,千万不要开车!")

在上面的代码中,应用了 if 语句的嵌套,其具体的执行流程如下图所示:
在这里插入图片描述
注意:

  1. 多分支结构,只要有一个分支被执行,其他分支都不会被执行
  2. 前一个条件被测试过,下一个条件相当于隐含着这个条件

2.5 条件表达式

我们从一个具体的例子切入本小节内容。假设现在有两个数字,我们希望获得其中较大的一个,那么可以使用 if else 语句,例如:

a = 3
b = 4
if a > b:
    max_value = a
else:
    max_value = b

但是 Python 提供了一种更加简洁的写法,如下所示:

max_value = a if a > b else b

这是一种类似于其它编程语言中三目运算符 ? : 的写法。Python 是一种极简主义的编程语言,它没有引入 ? : 这个新的运算符,而是使用已有的 if else 关键字来实现相同的功能。使用 if else 实现条件表达式的格式如下:

exp1 if condition else exp2

condition 是判断条件,exp1 和 exp2 是两个表达式。如果 condition 成立即结果为真,就执行 exp1,并把 exp1 的结果作为整个表达式的结果;如果 condition 不成立即结果为假,就执行 exp2,并把 exp2 的结果作为整个表达式的结果。前面的语句 max_value = a if a > b else b 的含义是:

  • 如果 a > b 成立,就把 a 作为整个表达式的值,并赋给变量 max_value;
  • 如果 a> b 不成立,就把 b 作为整个表达式的值,并赋给变量 max_value。

Python 条件表达式支持嵌套,如此可以构成更加复杂的表达式。在嵌套时需要注意 if 和 else 的配对,例如:

max_value = a if a > b else c if c > d else d
# 等价: max_value = a if a > b else (c if c > d else d)

使用 Python 条件表达式判断两个数字的关系:

C:\Users\amoxiang>python
Python 3.10.11 (tags/v3.10.11:7d4cc5a, Apr  5 2023, 00:38:17) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> a = int(input("Input a: "))
Input a: 100
>>> b = int(input("Input b: "))
Input b: 80
>>> print("a大于b") if a > b else (print("a小于b") if a < b else print("a等于b"))
a大于b

该程序是一个嵌套的条件表达式。程序先对 a>b 求值,如果该表达式为 True,程序就返回执行第一个表达式 print("a大于b"),否则将继续执行 else 后面的内容,也就是:

(print("a小于b") if a < b else print("a等于b")

进入该表达式后,先判断 a<b 是否成立,如果 a<b 的结果为 True,将执行 print("a小于b"),否则执行 print("a等于b")

三、循环结构

3.1 while循环

while 循环是通过一个条件来控制是否要继续反复执行循环体中的语句。语法如下:

while 条件表达式:
    循环体 # 说明:循环体是指一组被重复执行的语句

当条件表达式的返回值为真时,则执行循环体中的语句,执行完毕后,重新判断条件表达式的返回值,直到表达式返回的结果为假时,退出循环。while 循环语句的执行流程如下图所示:
在这里插入图片描述
我们用现实生活中的例子来理解 while 循环的执行流程。在体育课上,体育老师要求同学们沿着环形操场跑圈,要求当听到老师吹的哨子声时就停下来。同学们每跑一圈,可能会请求一次老师吹哨子。如果老师吹哨子,则停下来,即循环结束,否则继续跑步,即执行循环。下面通过一个具体的实例来解决应用场景中的第二个要素:依次尝试符合条件的数,此时,需要用到第一个要素确定是否符合条件。

助力瑛姑 ①:while循环版解题法。 使用 while 循环语句实现从0开始依次尝试符合条件的数,直到找到符合条件的数时,才退出循环。具体的实现方法是:首先定义一个用于存储数据的变量 number 和一个作为循环条件的变量 flag(默认值为真),然后编写 while 循环语句,在循环体中,将变量 number 的值加1,并且判断 number 的值是否符合条件,当符合条件时,将变量 flag 设置为假,从而退出循环。具体代码如下:

print("今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问几何?")
flag = True  # 作为循环条件的变量
number = 0  # 赋予初始的数据为0
while flag:
    if number % 3 == 2 and number % 5 == 3 and number % 7 == 2:  # 判断是否符合条件
        print("答曰:这个数是", number)  # 输出符合条件的数
        flag = False  # 将循环条件的变量赋值为否
    number += 1  # 数据加1

运行程序,将显示如下图所示的效果:
在这里插入图片描述
注意:在使用 while 循环语句时,一定不要忘记添加将循环条件改变为 False 的代码(例如上述中的第7行代码一定不能少),否则,将产生死循环。

3.2 for循环

for 循环是一个依次重复执行的循环。通常适用于枚举或遍历序列,以及迭代对象中的元素。语法如下:

for 迭代变量 in 可迭代对象:
    循环体

其中,迭代变量用于保存读取出的值;可迭代对象是指可以被迭代遍历的对象,在 Python 中常见的数据类型如 列表(list)、元组(tuple)、字典(dictionary)、集合(set) 等都属于可迭代对象;循环体为一组被重复执行的语句。for 循环语句的执行流程如下图所示:
在这里插入图片描述
我们用现实生活中的例子来理解 for 循环的执行流程。在体育课上,体育老师要求同学们排队进行踢毽球测试,每个同学一次机会,毽球落地则换另一个同学,直到全部同学都测试完毕,即循环结束。

补充知识点:range()函数——生成器函数。 range() 函数用于生成一个新的 range 对象,多用于 for 循环语句中,用于生成指定范围的整数。range() 函数的语法格式如下:

range(start, stop[, step])

参数说明:

  • start:表示起始整数(包含起始整数),默认起始值为0,起始整数可以省略,如果省略则表示从0开始;
  • end:表示结束整数(但不包括该值,如 range(7) 得到的值为 0~6,不包括7),结束数值不能省略。当 range() 函数中只有一个参数时,即表示指定计数的结束值。结束整数可以大于0,也可以小于或等于0,但是结束整数小于或等于0时,生成的 range 对象是不包含任何元素的;
  • step:表示步长,即两个数之间的间隔,参数 step 可以省略,如果省略则表示步长为1。例如,range(1,7) 将得到 1,2,3,4,5,6
  • 返回值:返回一个 range 对象。

注意:

  1. range() 函数接收的参数必须是整数,不能是浮点数等其他数据类型,否则会提示类型错误。
  2. 在使用 range() 函数时,如果只有一个参数,那么表示指定的是 stop 结束整数;如果是两个参数,则表示指定的是 start 开始整数和 end 结束整数;只有三个参数都存在时,最后一个参数才表示 step 步长。

示例1:根据提供的参数生成一个 range 对象。

C:\Users\amoxiang>python
Python 3.10.11 (tags/v3.10.11:7d4cc5a, Apr  5 2023, 00:38:17) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> print(range(15))
range(0, 15)
>>> print(range(50, 100, 1))
range(50, 100)
>>> print(range(50, 100, 10))
range(50, 100, 10)

示例2:for 循环结合 range() 函数进行数值循环。

C:\Users\amoxiang>python
Python 3.10.11 (tags/v3.10.11:7d4cc5a, Apr  5 2023, 00:38:17) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> for i in range(1, 3):
...     print(i)
...
1
2
>>> for i in range(1, 10, 2):
...     print(i, end=' ')
...
1 3 5 7 9 >>>

示例3:遍历字符串。使用 for 循环语句除了可以循环数值,还可以逐个遍历字符串,例如,下面的代码可以将横向显示的字符串转换为纵向显示:

C:\Users\amoxiang>python
Python 3.10.11 (tags/v3.10.11:7d4cc5a, Apr  5 2023, 00:38:17) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> s1 = '腹有读书气自华'
>>> print(s1)  # 横向显示
腹有读书气自华
>>> for ch in s1:
...     print(ch)  # 纵向显示
...
腹
有
读
书
气
自
华
>>>

说明: for 循环语句还可以用于迭代(遍历)列表、元组、集合和字典等,具体的方法将在后续文章中进行介绍。

3.3 循环嵌套

在 Python 中,允许在一个循环体中嵌入另一个循环,这称为循环嵌套。例如,在电影院找座位号,需要知道第几排第几列才能准确找到自己的座位号,假如寻找下图所示的在第二排第三列座位号,首先寻找第二排,然后在第二排再寻找第三列,这个寻找座位的过程就类似循环嵌套。
在这里插入图片描述
在 Python 中,for 循环和 while 循环都可以进行循环嵌套。例如,在while 循环中套用 while 循环的格式如下:

while 条件表达式1:
    while 条件表达式2:
        循环体2
    循环体1

在 for 循环中套用 for 循环的格式如下:

for 迭代变量1 in 对象1:
    for 迭代变量2 in 对象2:
        循环体2
    循环体1

在 while 循环中套用 for 循环的格式如下:

while 条件表达式:
    for 迭代变量 in 对象:
        循环体2
    循环体1

在 for 循环中套用 while 循环的格式如下:

for 迭代变量 in 对象:
    while 条件表达式:
        循环体2
    循环体1

除了上面介绍的4种嵌套格式外,还可以实现更多层的嵌套,因为与上面的嵌套方法类似,这里就不再一一列出了。使用嵌套的 for 循环打印九九乘法表,代码如下:

for i in range(1, 10):  # 输出9行
    for j in range(1, i + 1):  # 输出与行数相等的列
        print(str(j) + "×" + str(i) + "=" + str(i * j) + "\t", end='')
    print('')

上述的代码使用了双层 for 循环(循环流程如下图所示),第一个循环可以看成是对乘法表行数的控制,同时也是每一个乘法公式的第二个因数;第二个循环控制乘法表的列数,列数的最大值应该等于行数,因此第二个循环的条件应该是在第一个循环的基础上建立的。
在这里插入图片描述
程序运行结果如下图所示:

3.4 跳转语句

当循环条件一直满足时,程序将会一直执行下去,就像一辆迷路的车,在某个地方不停地转圈。如果希望在中间离开循环,也就是 for 循环结束重复之前,或者 while 循环找到结束条件之前。有两种方法来做到:

  1. 使用 continue 语句直接跳到循环的下一次迭代。
  2. 使用 break 完全中止循环。

3.4.1 break语句

break 语句可以终止当前的循环,包括 while 和 for 在内的所有控制语句。以独自一人沿着操场跑步为例,原计划跑10圈。可是在跑到第2圈的时候,遇到自己的女神或者男神,于是果断停下来,终止跑步,这就相当于使用了 break 语句提前终止了循环。break 语句的语法比较简单,只需要在相应的 while 或 for 语句中加入即可。在 while 语句中使用 break 语句的形式如下:

while 条件表达式1:
    执行代码
    if 条件表达式2:
        break

其中,条件表达式2用于判断何时调用 break 语句跳出循环。在 while 语句中使用 break 语句的流程如下图所示:
在这里插入图片描述
在 for 语句中使用 break 语句的形式如下:

for 迭代变量 in 可迭代对象:
    if 条件表达式:
        break

其中,条件表达式用于判断何时调用 break 语句跳出循环。在 for 语句中使用 break 语句的流程如下图所示:
在这里插入图片描述
示例:

print("今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问几何?")
for number in range(100):
    if number % 3 == 2 and number % 5 == 3 and number % 7 == 2:  # 判断是否符合条件
        print("答曰:这个数是", number)  # 输出符合条件的数
        break  # 跳出for循环

未添加 break 语句时的效果:
在这里插入图片描述
添加 break 语句时的效果:
在这里插入图片描述
说明: break 语句一般会结合 if 语句进行搭配使用,表示在某种条件下,跳出循环。如果使用嵌套循环,break 语句将跳出最内层的循环。

3.4.2 continue语句

continue 语句的作用没有 break 语句强大,它只能终止本次循环而提前进入到下一次循环中。仍然以独自一人沿着操场跑步为例,原计划跑步10圈。当跑到第2圈一半的时候,遇到自己的女神或者男神也在跑步,于是果断停下来,跑回起点等待,制造一次完美邂逅,然后从第3圈开始继续。continue 语句的语法比较简单,只需要在相应的 while 或 for 语句中加入即可。

continue 语句一般会与 if 语句搭配使用,表示在某种条件下,跳过当前循环的剩余语句,然后继续进行下一轮循环。如果使用嵌套循环,continue 语句将只跳过最内层循环中的剩余语句。

在 while 语句中使用 continue 语句的形式如下:

while 条件表达式1:
    执行代码
    if 条件表达式2:
        continue

其中,条件表达式2用于判断何时调用 continue 语句跳出循环。在 while 语句中使用 continue 语句的流程如下图所示:
在这里插入图片描述
在 for 语句中使用 continue 语句的形式如下:

for 迭代变量 in 可迭代对象:
    if 条件表达式:
        continue

其中,条件表达式用于判断何时调用 continue 语句跳出循环。在 for 语句中使用 continue 语句的流程如下图所示:
在这里插入图片描述
场景模拟:几个好朋友一起玩逢七拍腿游戏,即从1开始依次数数,当数到包含7的数或7的倍数时,则不报出该数,而是拍一下腿。现在编写程序,从1数到99,假设每个人都没有出错,计算一共要拍多少次腿。

total = 99  # 记录拍腿次数的变量
for number in range(1, 100):  # 创建一个从1到100(不包括)的循环
    if number % 7 == 0:  # 判断是否为7的倍数
        continue  # 继续下一次循环
    else:
        s1 = str(number)  # 将数值转换为字符串
        if '7' in s1:  # 判断是否以数字是否包含7
            continue  # 继续下一次循环
    total -= 1  # 可拍腿次数-1
print("从1数到99共拍腿", total, "次。")  # 显示拍腿次数

3.5 else子句

循环可以和 else 配合使用,else 下方缩进的代码指的是当循环正常结束之后要执行的代码。 while 和 for 都可以配合 else 使用。举例:

for i in range(0):  # 可迭代对象没有迭代
    pass
else:
    print('ok')

for i in range(0, 10):
    break
else:
    print('ok')
for i in range(0, 10):
    continue
else:
    print('ok')

有上例可知,一般情况下,循环正常执行,只要当前循环不是被 break 打断的,就可以执行 else 子句,哪怕是 range(0) 也可以执行 else 子句。while 结合 else 的语法格式和用法与 for 循环一样,此处不再赘述,语法格式如下:

while 条件:
    条件成立重复执行的代码
else:
    循环正常结束之后要执行的代码

3.6 pass空语句

在 Python 中还有一个 pass 语句,表示空语句。它不做任何事情,一般起到占位作用。例如,在应用 for 循环输出1~10之间(不包括10)的偶数时,在不是偶数时,应用 pass 语句占个位置,方便以后对不是偶数的数进行处理。代码如下:

for i in range(1, 10):
    if i % 2 == 0:  # 判断是否为偶数
        print(i, end=' ')
    else:  # 不是偶数
        pass  # 占位符,不做任何事情

pass 语句和注释之间的区别在于:解释器会完全忽略注释,但不会忽略 pass 语句。

四、练习题及详解

1.关键字()用于测试一个对象是否是一个可迭代对象的元素。

A.if
B.in
C.belong
D.range

此题答案为:B。在 Python 中,in 是一个关键字,用于判断某个元素是否存在于一个可迭代对象中(如字符串、列表、元组、集合或字典)。A.if:用于控制流程(条件判断),不是用于检查元素归属的关键字。C.belong:不是 Python 的关键字。D.range:是一个用于生成整数序列的函数,不是用来测试元素是否属于某对象。

2.终止本次循环而提前进入下一次循环,应该使用什么语句?

A.else语句
B.pass语句
C.break语句
D.continue语句

此题答案为:D。在 Python 中:continue:用于跳过本次循环剩余的代码,直接进入下一次循环。break:用于直接终止整个循环。A.else语句:用在 if、for、while、try 后面,不能用来控制循环跳过。B.pass语句:占位用的语句,不执行任何操作。C.break语句:终止整个循环,不是进入下一次循环。

3.一直重复,直到条件不满足时才结束的循环,是什么循环?

A.计次循环
B.无限循环
C.重复循环
D.条件循环

此题答案为:D。条件循环是指当某个条件为真时,就不断重复执行循环体;直到条件不满足时才停止。这正是 Python 中 while 循环的原理。A.计次循环:通常指的是执行固定次数的循环,比如 for i in range(10)。B.无限循环:条件永远为真,不会自动结束,除非遇到 break 或外部中断。C.重复循环:不是 Python 中的正式术语,也不是标准的循环类型名称。

4.if,elif和else哪个不需要判断表达式真假?

A.if
B.elif
C.else
D.else if

此题答案为:C。if:后面必须跟一个判断表达式(布尔类型),为 True 才执行其代码块。elif(即 "else if" ):也需要一个判断表达式,当上面的 if 或前面的 elif 不满足时,它会判断自己是否满足。else:不需要任何判断条件,它是在前面所有 if 和 elif 条件都不满足时执行的 "兜底" 语句。D.else if 不是 Python 的语法,Python 使用 elif 来代替 else if。

5.出现哪项错误会弹出如下提示框:
在这里插入图片描述

A.代码缩进量错误
B.使用关键字做变量名
C.if 语句后面未加冒号
D.未将字符串放在引号内引用

此题答案为:B。A.代码缩进量错误会提示:IndentationError: unindent does not match any outer indentation level。C.if 语句后面未加冒号会提示:SyntaxError: expected ':'。D.未将字符串放在引号内引用会提示:NameError。

6.在使用while循环语句时,我们会添加将循环条件改变为False的代码,为什么?

A.否则,语句将会报错
B.使语句规范
C.否则,将产生死循环
D.添加不添加都可以

此题答案为:C。如果循环条件一直为 True,并且没有在循环体中改变这个条件的代码,就会导致循环永远不会结束 —— 也就是死循环。

7.在循环语句中,()语句的作用是提前结束本次循环:

A.else
B.pass
C.break
D.continue

此题答案为:D。A.else 和循环语句配合使用,当循环正常结束(未被 break)时执行。B.pass 什么也不做,占位符语句。C.break 直接终止整个循环。D.continue 提前结束本次循环,进入下一次。

8.关于程序的控制结构,哪个选项的描述是错误的?

A.流程图可以用来展示程序结构
B.顺序结构有一个入口
C.控制结构可以用来更改程序的执行顺序
D.循环结构可以没有出口

此题答案为:D。A.流程图可以用来展示程序结构正确。流程图可以清晰地表示程序的逻辑结构和执行流程,是一种可视化的工具。B.顺序结构有一个入口正确。顺序结构是最基本的控制结构,按照代码的先后顺序依次执行,确实只有一个入口。C.控制结构可以用来更改程序的执行顺序正确。控制结构包括顺序、分支(if/else)、循环(while/for)等,用来控制程序的执行流程。D.循环结构可以没有出口错误。循环结构必须有退出条件,否则会导致死循环,程序无法正常结束。就算是无限循环,也需要依靠某种外部中断或程序内的 break来跳出。

9.“上清华”还是“上北大”?这个问题可难为坏小时候的我了!如果将这个问题写成Python代码,可以用以下哪个语句:

A.for循环语句
B.while循环语句
C.switch语句
D.if...elif...语句

此题答案为:D。这个问题 "上清华还是上北大" 是在进行选择性判断,适合用 if…elif… 语句来解决。我们可以通过多个条件来判断和选择不同的结果。A.for循环语句:用于循环遍历一系列元素,不适合直接用来做 "选择性判断"。B.while循环语句:也用于循环,与 "选择性判断" 无关。C.switch语句:Python 中没有 switch 语句,尽管它在其他语言(如 C)中是有效的,但 Python 通常使用 if…elif… 来代替。

10.使用while…else循环语句时,else中的代码块会在while循环正常执行完的情况下执行,如果while循环被break中断,else中的代码块():

A.会执行
B.不会执行
C.不一定执行
D.可能消失

此题答案为:B。在使用 while…else 循环时:else 语句块会在 while 循环正常执行完毕时执行。也就是说,当 while 循环条件变为 False,并且没有被 break 中断时,else 会执行。如果 while 循环在中途被 break 中断,else 语句块就不会执行。

11.对于带有else子句的for循环和while循环,当循环因循环条件不成立而自然结束时,会执行else中的代码吗:

A.会
B.不会
C.for 循环会,while 循环不会
D.while 循环不会,for 循环会

此题答案为:A。在Python中,for 和 while 循环如果没有被 break 语句中断,循环结束后会执行 else 子句。else 子句是在循环正常结束(即循环条件不成立时)时执行的,而不是在循环被 break 跳出时。如果循环被 break 提前终止,else 块将不会执行。所以,不论是 for 循环还是 while 循环,只要循环是正常结束的(即条件不再满足),else 子句都会执行。

12.哪个选项对死循环的描述是正确的?

A.使用for语句不会出现死循环
B.死循环就是没有意义的
C.死循环有时候对编程有一定作用
D.无限循环就是死循环

此题答案为:C。死循环(或无限循环)指的是一个循环条件永远成立,导致循环不断执行下去。虽然死循环在大多数情况下是一个编程错误,导致程序无法正常结束,但在某些情况下,死循环是有用的。例如:服务器和后台程序:某些后台程序会通过死循环不断监听请求和事件,直到程序被外部信号或用户手动终止。嵌入式系统:嵌入式设备通常会在死循环中等待输入,或者在某些实时任务中持续运行。因此,虽然死循环常常是一个错误,但在特定的编程场景下,它有时是不可避免或必要的。无限循环(Infinite Loop) 指的是一个没有终止条件的循环。实际上,所有的死循环都是无限循环,但并不是所有的无限循环都必须是死循环。死循环通常指的是逻辑错误或不当的设计,即程序进入了一个永远无法停止的循环,通常是由于条件设置错误造成的。而无限循环在某些特定情况下(比如后台服务、实时监控等)可能是有意设计的,并且它不一定是错误的。所以,死循环是一种错误的无限循环,但并不是所有的无限循环都是死循环。

13.在if…else…语句中,下列哪项作为if的表达式,会执行else语句:

A.None
B.0
C.空字符串
D.以上都是

此题答案为:D。在Python中,if 条件语句会根据条件表达式的真假来决定是否执行 else 子句。Python的布尔值规则如下:None、0、空字符串("")、空列表([])、空字典({})等被视为假(False)。任何非空的值或非零的数字会被视为真(True)。

14.下列有关break语句与continue语句不正确的是?

A.当多个循环语句彼此嵌套时,break语句只适用于所在层的循环。
B.continue语句类似于break语句,也必须在forwhile循环中使用。
C.continue语句结束循环,继续执行循环语句的后继语句。
D.break语句结束循环,继续执行循环语句的后继语句。

此题答案为:D。这句话是不正确的。break 语句会完全退出当前的循环,并不会继续执行循环语句的后继语句。它会跳出整个循环结构,程序会继续执行循环外的代码。

15.下列关于循环的说法不正确的是:

A.Python中可以应用do...while 循环
B.Python中的for循环和while循环都可以带有else子句
C.while循环需要有一个控制条件来决定是否执行循环体中的语句
D.for循环通常适用于枚举、遍历序列以及迭代对象中的元素

此题答案为:A。Python 没有 do…while 循环。Python 只有 for 循环和 while 循环。do…while 循环通常在其他编程语言中使用,但在Python中,while 循环的条件是先检查的,不能保证循环体至少执行一次(而 do…while 循环是先执行循环体再检查条件)。要模拟 do…while 的行为,可以使用 while 循环加上 break 来实现。

16.阅读下面代码,看看运行后的输出结果是:

x = 1.5
N = 2
while x <= N:
    print(x)
    x = x + 1

A.1
B.2
C.1.5
D.3

此题答案为:C。在这段代码中:初始时,x = 1.5 和 N = 2。进入 while 循环时,条件是 x <= N,即 1.5 <= 2,条件成立。然后打印 x,所以输出为 1.5。然后 x = x + 1,所以 x 更新为 2.5。再次检查条件 x <= N,即 2.5 <= 2,条件不成立,循环结束。因此,循环只执行了一次,输出结果是 1.5。

17.阅读下面的代码,输出结果是什么?

for i in range(1, 15, 5):
    print(i, end="")

A.1515
B.1234
C.1611
D.0

此题答案为:C。range(1, 15, 5) 生成的数字是从 1 开始,每次增加 5,直到不超过 15。所以,range(1, 15, 5) 会生成 1, 6, 11。for i in range(1, 15, 5) 循环会遍历这些数字,并使用 print(i, end="") 打印出每个数字,但没有换行符(end=""),所以输出结果是这些数字连接在一起。因此,输出结果是:1611

18.在if语句之前填入下列哪项代码,可以计算出400以内能被13整除的最大正整数:

    if n % 13 == 0:
        print(n)
        break
    n = n - 1

A.for n in range(400)
B.for n in (400,0,-1)
C.while n = 400
D.n = 400
  while n <= 400:

此题答案为:D。在代码逻辑中,我们从 400 开始,逐渐减小 n 的值,直到找到能被 13 整除的最大值。代码中的 n = n - 1 确保了每次 n 减少 1。现在,我们需要在 if 语句之前设置 n = 400,然后通过 while n <= 400 循环来进行计算。

19.运行下面代码,会输出什么呢?

for n in range(2, 3):
    for x in range(2, n):
        if n % x == 0:
            print(n, '等于', x, '*', n // x)
            break
    else:
        print(n, ' 是质数')

A.0 是质数
B.1 是质数
C.3 是质数
D.2 是质数

此题答案为:D。这段代码的逻辑是:外层循环 for n in range(2, 3): 只会执行一次,其中 n = 2。内层循环 for x in range(2, n): 在此时 n = 2,所以 range(2, 2) 生成的是一个空范围,即内层循环不会执行。else 语句会在内层循环没有执行 break 语句时执行。由于内层循环没有找到能整除 n 的 x,所以 else 语句执行,输出 2 是质数。

20.期末考试结束了,小明和他的小伙伴们4个人的语文成绩下来了,于是小明想计算他们的平均成绩,运行下面代码,输出是什么?

L = [75, 92, 59, 68]
sum = 0
for score in L:
    sum = sum + score
average = sum / 4.0
print("成绩的平均值为:", average)

A.成绩的平均值为: 73.5
B.成绩的平均值为: “73.5”
C.“成绩的平均值为:” 73.5
D.编译错误,无法输出

此题答案为:A

21.“红灯停,绿灯行,黄灯亮了等一等”,小明写了如下代码,输入red后,会输出什么结果:

light = input("请输入交通信号灯的颜色:(red, green, yellow)")
if light == "green":
    print("绿灯行")

print("请正常行驶")

A.什么也不输出
B.程序报错
C.红灯停
D.请正常行驶

此题答案为:D。在这段代码中,input() 函数会接收用户的输入。在输入 red 后,light 的值就会是 "red"。代码逻辑如下:light = input("请输入交通信号灯的颜色:(red, green, yellow)"): 等待用户输入,假设输入的是 red。if light == "green"::判断 light 是否等于 "green"。由于输入是 red,这个条件不成立,因此不会执行 print("绿灯行")。无论条件是否成立,接下来都会执行 print("请正常行驶")

22.狗狗是人类的朋友,1岁狗狗的年龄相当于人类14岁,2岁相当于22岁,以后每大1岁相当于人类加5岁,现在小狗明明7岁了,按下面的程序输入7,会输出什么呢?

age = int(input("请输入你家狗狗的年龄: "))
print("")
if age < 0:
    print("你是在逗我吧!")
elif age == 1:
    print("相当于 14 岁的人。")
elif age == 2:
    print("相当于 22 岁的人。")
elif age > 2:
    human = 22 + (age - 2) * 5
    print("对应人类年龄: ", human)

A.对应人类年龄:  47
B.对应人类年龄:  42
C.对应人类年龄:  7
D.对应人类年龄:  30

此题答案为:A。当输入狗狗的年龄为7时,程序执行的步骤如下:age = 7,进入 elif age > 2: 语句块。计算 human = 22 + (7 - 2) * 5,即 human = 22 + 5 * 5 = 22 + 25 = 47。输出 "对应人类年龄: 47"

23.最近影院上映了许多惊悚的电影,于是设置了未满18不准观看,阅读下面的代码,看看运行后会输出什么呢?

age = 10
if age >= 18:
    print("you can see these movies")
else:
    print("you can not see these movies")

A."you can see these movies"
B.you can see these movies
C.you can not see these movies
D."you can not see these movies"

此题答案为:C。age = 10,设置了年龄为 10。if age >= 18: 判断年龄是否大于等于 18。由于 age = 10,条件不成立,所以程序会跳到 else 部分。在 else 部分,输出 "you can not see these movies"

24.运行下面的语句,会输出什么呢?

a = 8
b = 11
r = a if a > b else b
print(r)

A.8
B.1
C.11
D.19

此题答案为:C。这段代码使用了 Python 中的条件表达式(又称三元运算符):r = a if a > b else b。这意味着:如果 a > b,则 r 被赋值为 a。否则,r 被赋值为 b。在这段代码中:a = 8,b = 11。a > b 为 False,因为 8 小于 11。所以,r 会被赋值为 b,即 r = 11。最后,print® 会输出 11。因此,正确答案是 C.11。

25.程序员小哥哥想要和女神表白,他在第2行可以填入下列哪项:

x = 'I like you!'

    print(i, end="")

A.for i in range(x):
B.for i in x:
C.if i in x:
D.if i in range(x):

此题答案为:B。在这个问题中,我们假设程序员小哥哥想要逐个输出字符串 x = 'I like you!' 中的每个字符。选项 A (for i in range(x): 是错误的,因为 x 是一个字符串,不能直接用于 range() 函数,range() 函数通常需要一个整数作为参数。选项 B (for i in x:) 是正确的,因为它会遍历字符串 x 中的每个字符,将每个字符依次赋值给 i,然后打印出来。选项 C (if i in x:) 也是不对的,因为它只是判断 i 是否存在于字符串 x 中,而不是遍历整个字符串。选项 D if i in range(x):是错误的,因为 range(x) 期望 x 是一个整数,而不是一个字符串。因此,正确的填入代码是 B. for i in x:,这将遍历字符串 x 中的每个字符并逐个打印出来。

26.运行下面这段代码,会输出什么呢?

n = s = 0

while n <= 98:
    n += 1
if n % 2 == 0:
    s -= n
else:
    s += n
    print(s)

A.1
B.100
C.99
D.199

此题答案为:C。这段代码的执行过程如下:n = s = 0:初始化 n 和 s 为 0。while n <= 98: 进入循环,直到 n 增加到 99 为止。在循环中,n += 1 每次将 n 增加 1,直到 n = 99 时循环结束。循环结束后,n 的值是 99。接下来的 if n % 2 == 0: 判断 n 是否是偶数:n = 99,所以 99 % 2 != 0,进入 else 部分。在 else 部分,s += n 使得 s 增加 n 的值,即 s = 0 + 99 = 99。最后,print(s) 输出 s 的值,即 99。因此,程序的输出是 99,所以正确答案是 C.99。

27.Python中的if语句可不是死板的if语句,可以有几种写法的,那么下列3行代码中,填入下列哪一项程序不能正常执行:

a = 1
b = 2
A.if a < b: print(a)
B.print(a) if a< b else print(b)
C.print(a if a<b else b)
D.if a < b
	print(a)

此题答案为:D。if 语句后必须跟一个冒号 : 来标识代码块,且 print(a) 应该在下一行或同一行并缩进。因此,缺少冒号导致语法错误。

28.用1,2,3,这3个数字组成互不相同且无重复数字的两位数有多少种组合?下面是小明给出的代码, 请判断输出结果:

m = 0
for i in range(1, 4):
    for j in range(1, 4):
        if i != j:
            print(i * 10 + j)
            m += 1

print('共有', m, '种组合')

此题答案为:共有 6 种组合。在这段代码中,小明正在使用嵌套的 for 循环来生成两位数的组合,条件是组成两位数的数字 i 和 j 不能相同。具体分析如下:外层循环 for i in range(1, 4): 遍历 1, 2, 3。内层循环 for j in range(1, 4): 同样遍历 1, 2, 3。在每次循环时,判断 if i != j:,确保 i 和 j 不相同。若不相同,则执行 print(i * 10 + j),这会输出由 i 和 j 组成的两位数。m += 1 用于计数,记录符合条件的组合的数量。两位数的组合如下:当 i = 1 时,j 可以是 2 或 3,输出 12 和 13。当 i = 2 时,j 可以是 1 或 3,输出 21 和 23。当 i = 3 时,j 可以是 1 或 2,输出 31 和 32。所以,输出的六个两位数为:12, 13, 21, 23, 31, 32。

29.哪个选项是实现多路分支的最佳控制结构?

A.if
B.if-elif-else
C.try
D.if-else

此题答案为:B。在 Python 中,控制结构有多种类型,用于根据不同的条件执行不同的代码。对于多路分支,即根据多个不同的条件执行不同的代码,最佳的控制结构是 if-elif-else。A. if:if 语句只能用于检查一个条件。对于多个条件判断,它无法直接处理,因此不是最佳选择。B. if-elif-else:这是最常见的用于多路分支的控制结构。它允许你根据多个条件进行判断,并根据条件的不同执行不同的代码块。C. try:try 用于异常处理,不适用于多路分支判断。D. if-else:if-else 语句只能处理两种情况(如果条件成立则执行 if 部分,否则执行 else 部分),不适用于处理多个条件。

30.想要遍历0-9范围内的所有数字,并通过循环控制语句打印出其中的奇数,下列代码中第3行应输入:

for i in range(10): 
	if i % 2 == 0:

	print(i, end=' ')
A.break
B.continue
C.i += 1
D.i -= 1

此题答案为:B。这段代码的目的是遍历 0-9 范围内的数字,并通过循环控制语句打印出其中的奇数。代码中的判断条件 if i % 2 == 0: 用于检查当前数字是否是偶数。若是偶数,则应该跳过该数字,继续下一次循环,避免打印偶数。A.break:break 语句会立即退出循环,停止进一步的迭代,无法实现跳过偶数的目的,因此不适用。B.continue:continue 语句用于跳过当前循环的余下部分,直接进入下一次循环。在这个上下文中,它非常适合用来跳过偶数,打印出奇数。C.i += 1:这会增加 i 的值,但对于 for i in range(10) 来说,i 会自动递增,因此手动改变 i 的值不是解决问题的正确方法。D.i -= 1:类似于 i += 1,手动改变 i 的值会导致不必要的逻辑错误,因为 range(10) 会自动控制 i 的递增。

31.暑假余额不足,已无可用充值!还没写暑假作业的小明可有点慌了!还有6天开学,他开始“快马加鞭”赶作业,他每天所剩作业都是上一天所剩作业的一半,在开学前一天他还剩1页作业没做,想要计算出他一共有多少页作业,下列代码是否正确:

x = 1
day = 6
while day > 0:
    x = 2 * x
    day -= 1
print(x)

A.2行应改为 day=5
B.3行应改为while day <= 6
C.4行应改为x = 2*x+1
D.5行应改为day += 1

此题答案为:A。这段代码的逻辑正确地通过将作业量每次翻倍来推算最初的作业量,但 day = 6 会导致代码运行结束时 day 为 0,因此它会正确执行 6 次循环,计算出最终的作业量(即他最初有多少页作业)。但是,实际上在第 6 天时,小明的作业量已经为 1 页,因此应该从 day = 5 开始,这样第 1 天到第 5 天的作业量才能得到正确的计算。

32.小明写了一组代码,对100以内的两位数,使用一个两重循环打印出所有十位数数字比个位数数字小的数,看看他写的哪里错了吧。

for x in [1, 2, 3, 4, 5, 6, 7, 8, 9]:
    for y in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]:
        if x < y:
            print('十位数数字比个位数数字小的数:', x + y)

A.1for改成while
B.3if x<y:改成if x<y
C.4行改成print ('十位数数字比个位数数字小的数:',x*10+ y)
D.没有错误

此题答案为:C。问题出在 print 语句:当前代码中的 x + y 实际上是将十位数和个位数的数字相加,而不是组合成一个完整的两位数。正确的方式应该是 x * 10 + y,这样可以将 x(十位数)和 y(个位数)组合成一个两位数。

33.每年都有12个月,每个月的天数又不完全一样,下面这组代码,用户输入月份,判断当前月份为几月,并输出有多少天。如果用户输入2月份,则请用户输入年份,判断平年则输出28天,闰年则输出29天。(能被4整除但不能被100整除,或者能被400整除)看看有什么错误吧!

while:
    month1 = input("请输入月份:")
    if month1.isdigit():
        month = int(month1)
        if month in [1, 3, 5, 7, 8, 10, 12]:
            print("此月有31天")
        elif month in [4, 6, 9, 11]:
            print("此月有30天")
        elif month == 2:
            year1 = input("请输入年份:")
            if year1.isdigit():
                year = int(year1)
                if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
                    print("此月份有29天")
                else:
                    print("此月份有28天")
            else:
                print("输入有误,请重新输入")
    else:
        print("输入有误,请重新输入")

A.第一行while:改成while True:
B.9==2改成=2
C.17else改成elif
D.没有错误

此题答案为:A。第一行while:应改成while True::代码中的 while: 是不合法的,应该改成 while True:,以便进入一个无限循环,让用户可以反复输入月份,直到输入有效的数据为止。如果用 while:,程序会出现语法错误。

34.学校现有一个出国深造的名额,优秀的小明得知此事,立马报了名。但只有综合平均成绩不低于92分(满分100分)的应届毕业生才有机会参加面试,已知包括小明在内共有5人报名,想要算出有几个人有参加面试的资格,小明写了如下代码,请问是否有误:

i = 0
sum = 0
if i < 5:
    a = input("是否为应届毕业生:")
    b = int(input("平均综合成绩:"))
    if a == '是' and 92 <= b <= 100:
        print("符合面试条件")
        sum += 1
        i += 1
print("\n满足条件的人数为:", sum)

A.没有错误
B.1处错误,第3行应改为if i <6
C.2处错误
	第3行应改为 while i <5:9行 i +=1 的缩进量应与第6if 的缩进量相同
D.3处错误,包括选项C中的错误和第10print语句的缩进量应与第6if语句的缩进量相同

此题答案为:C。第3行:if i < 5: 的判断条件应该是使用 while i < 5:,因为我们希望让程序进行 5 次循环,以便每次检查一个报名者的信息。如果用 if i < 5: 只是进行了单次检查,程序不会执行 5 次判断。第9行:i += 1 的缩进应该与 if a == '是' and 92 <= b <= 100: 语句的缩进保持一致。否则,i += 1 会在 if 语句外部执行,导致判断逻辑错乱。正确的做法是将 i += 1 与 if 语句对齐,这样只有在符合条件时才增加计数器 i,确保按要求统计合格人数。

35.小明最近迷上了Python,他写了一段代码,输出我要好好学习,如果输入y则继续,否则退出,看看他写的对吗?

tag = 'y'
for tag== "y":
    print("我要好好学习")
    tag = input('是否继续?y/n')

A.1行改成tag=y
B.2for改成while
C.3行改成print(我要好好学习)
D.没有错误

此题答案为:B。在这段代码中,for tag == "y": 的写法是错误的。for 循环通常用于遍历一个可迭代对象(如列表、字符串等),而这里的条件 tag == "y" 是一个布尔表达式,它本身并不是一个可迭代对象,因此 for 循环在此处是不合适的。应该使用 while 循环来实现这个逻辑:当 tag == "y" 时,继续循环;否则退出。

36.刘二豆最近在学Python,他写了一组代码,想要输出10行10列的*,帮他看看有什么错误吧。

for i in range(1, 10):
    for j in range(1, 11):
        print("*", end="")
print()

A.110改成11
B.211改成10
C.2range改成random
D.正确,可以输出

此题答案为:A。1行10改成11:这是正确的修改,因为我们需要 10 行,而 range(1, 10) 只会循环 9 次,改为 range(1, 11) 会让它循环 10 次,确保输出 10 行。

至此今天的学习就到此结束了,笔者在这里声明,笔者写文章只是为了学习交流,以及让更多学习Python语言的读者少走一些弯路,节省时间,并不用做其他用途,如有侵权,联系博主删除即可。感谢您阅读本篇博文,希望本文能成为您编程路上的领航者。祝您阅读愉快!


在这里插入图片描述

    好书不厌读百回,熟读课思子自知。而我想要成为全场最靓的仔,就必须坚持通过学习来获取更多知识,用知识改变命运,用博客见证成长,用行动证明我在努力。
    如果我的博客对你有帮助、如果你喜欢我的博客内容,请 点赞评论收藏 一键三连哦!听说点赞的人运气不会太差,每一天都会元气满满呦!如果实在要白嫖的话,那祝你开心每一天,欢迎常来我博客看看。
 编码不易,大家的支持就是我坚持下去的动力。点赞后不要忘了 关注 我哦!


网站公告

今日签到

点亮在社区的每一天
去签到