9.【Python编程】循环语句while、for及其与else、break、continue、pass的组合使用

备注: 本教程主要使用Python3.6在jupyter notebook上编程实现。Python环境配置参考《【Python学习】Windows10开始你的Anaconda安装与Python环境管理》或者《【Python学习】纯终端命令开始你的Anaconda安装与Python环境管理》

9.1 循环的意义与定义

循环语句就是在某种条件下,循环的执行某段代码块,并在符合条件的情况下跳出该段循环,其目的是处理想要进行处理的相同任务,它的关键词主要以:forwhile来标识。

  • while 循环

while循环是在一定的条件下按照流程执行。因此,while循环有2个要点:1.判断(放行)条件;2.执行流程。其格式如下所示:

# 循环前面的代码
...
while 判断条件(condition)# 循环里面的代码
    执行语句(statements)...

# 循环结束后的后续代码
...

例如,利用while循环实现等差数列{1,2,3,...,100}求和:

n = 100
 
sum = 0
i = 1
while i <= n:
    sum = sum + i
    i += 1 # i=i+1的意思

print("1 到 %d 之和为: %d" % (n,sum))
1 到 100 之和为: 5050
  • for 循环

在Python当中,for 循环可以遍历任何可迭代对象,如一个列表、元组、字典、集合、字符串,以及其他一切实现了__inter__方法的对象。其格式如下所示:

# 循环前面的代码
...
for <变量> in <可迭代对象>:
    # 循环里面的代码
    <statements>
    
# 循环结束后的后续代码
...

例如,利用for循环实现等差数列{1,2,3,...,100}求和:

n = 100
sum = 0
# range(start, stop[, step])返回一个可迭代对象
# 从0开始,步长为step,最后一个元素为stop-1
# 所以下面采用的是range(n+1)
for i in range(n+1):
    sum = sum + i
print("1 到 %d 之和为: %d" % (n,sum))
1 到 100 之和为: 5050

9.2 无限循环

无限循环在服务器上客户端的实时请求非常有用。通过设置条件表达式永远为True来实现无限循环,格式如下:

# 循环前面的代码
...
while True# 无限循环里面的代码
    执行语句(statements)...

注意: 可以使用 CTRL+C来退出当前的无限循环。

下面的例子实现永久提供根据年龄查询是否成年的服务:

while True:
    age=int(input("请输入你的年龄:"))
    if age >= 18:
        print("你已经成年了!")
    else:
        print("你还未成年!")
请输入你的年龄:18
你已经成年了!
请输入你的年龄:21
你已经成年了!
请输入你的年龄:12
你还未成年!

Ctrl+C中断
---------------------------------------------------------------------------

KeyboardInterrupt                         Traceback (most recent call last)

<ipython-input-6-0001704c5f59> in <module>
      1 while True:
----> 2     age=int(input("请输入你的年龄:"))
      3     if age >= 18:
      4         print("你已经成年了!")
      5     else:


~/anaconda3/envs/py36/lib/python3.6/site-packages/ipykernel/kernelbase.py in raw_input(self, prompt)
    861             self._parent_ident,
    862             self._parent_header,
--> 863             password=False,
    864         )
    865 


~/anaconda3/envs/py36/lib/python3.6/site-packages/ipykernel/kernelbase.py in _input_request(self, prompt, ident, parent, password)
    902             except KeyboardInterrupt:
    903                 # re-raise KeyboardInterrupt, to truncate traceback
--> 904                 raise KeyboardInterrupt("Interrupted by user") from None
    905             except Exception as e:
    906                 self.log.warning("Invalid Message:", exc_info=True)


KeyboardInterrupt: Interrupted by user

9.3 循环语句搭配else

Python的while...elsefor...else语句,是Python中最不常用,最为误解的语法特性之一。Python中的for、while循环都有一个可选的else分支(类似if语句和try语句那样),在循环迭代正常完成之后执行。换句话说,如果我们不是除正常以外的其他方式退出循环,那么else分支将会被执行。也就是在循环体内没有break语句、没有return语句,或者没有异常出现时,else分支会被执行

  • while…else 语句
# 循环前面的代码
...
while 判断条件(condition)# 循环里面的代码
    执行语句(statements)...
else:
    # 循环迭代正常完成时执行一遍下面语句
    执行语句(statements)...

# else语句执行结束后的后续代码
...

如果 while 后面的条件语句为 false,而且在循环体内没有break语句、没有return语句,或者没有异常出现时,则执行 else 的语句块。

count = 0
while count < 3:
    print(count, " 小于3")
    count = count + 1
else:
    print(count, " 大于或等于3")
0  小于3
1  小于3
2  小于3
3  大于或等于3

例如,在用户输入正确的时候退出循环,输入次数太多的时候提示用户,可以实现如下代码:

user_passwd = '123456'
count = 0
while count < 3:
    passwd = input("请输入密码:")
    if passwd==user_passwd:
        break
    print("密码不正确,请重新输入!")
    count = count + 1
else:
    print("警告:你已经连续三次错误输入密码了,请5分钟后重新尝试!")
请输入密码:1234
密码不正确,请重新输入!
请输入密码:666
密码不正确,请重新输入!
请输入密码:1212
密码不正确,请重新输入!
警告:你已经连续三次错误输入密码了,请5分钟后重新尝试!
  • for…else语句

while...else语句类似,

# 循环前面的代码
...
for <变量> in <可迭代对象>:
    # 循环里面的代码
    <statements>
else:
    # 循环迭代正常完成时执行一遍下面语句
    执行语句(statements)...

# else语句执行结束后的后续代码
...

例如,判断2~19当中那些是质数,代码如下:

for n in range(2, 20):
    for j in range(2, n):
        if n % j == 0:
            print(n, '等于', j, '*', n//j)
            break
    else:
        # 循环中没有找到元素
        print(n, ' 是质数')
2  是质数
3  是质数
4 等于 2 * 2
5  是质数
6 等于 2 * 3
7  是质数
8 等于 2 * 4
9 等于 3 * 3
10 等于 2 * 5
11  是质数
12 等于 2 * 6
13  是质数
14 等于 2 * 7
15 等于 3 * 5
16 等于 2 * 8
17  是质数
18 等于 2 * 9
19  是质数

9.4 break、continue与pass 语句

  • break语句可以跳出 for 和 while 的循环体。如果你从 for 或 while 循环中终止,任何对应的循环 else 块将不执行。如果你使用嵌套循环,break语句将停止执行最深层的循环,并开始执行下一行代码。

  • continue语句被用来告诉 Python 跳过当前循环块中的剩余语句,然后继续进行下一轮循环。

  • pass语句不做任何事情,一般用做占位语句,是为了保持程序结构的完整性。

问题:找出2到100的前10个素数

# 使用break语句实现
count = 0 # 素数个数统计器
prime_number = []
for n in range(2, 101):
    for j in range(2, n):
        if n % j == 0:
            break # 跳出内部循环
    else:
        prime_number.append(n)
        count += 1
    if count == 10:
        break # 跳出外部循环
print("2到100的前10个素数为:",prime_number)
2到100的前10个素数为: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]

问题:打印列表的所有奇数

# 使用continue语句实现
list1 = [1,3,5,7,8,9,23,45,66,78]
for i in list1:
    if i%2 == 0:
        # 遇到偶数则跳过后面的打印语句
        continue
    print(i)
1
3
5
7
9
23
45
# pass语句不做任何事情,一般用做占位语句,是为了保持程序结构的完整性。
for letter in 'Hello world!': 
    if letter == 'o':
        pass
        print('执行 pass 块')
    print('当前字母 :', letter)
当前字母 : H
当前字母 : e
当前字母 : l
当前字母 : l
执行 pass 块
当前字母 : o
当前字母 :  
当前字母 : w
执行 pass 块
当前字母 : o
当前字母 : r
当前字母 : l
当前字母 : d
当前字母 : !
Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐