跟着NOAI考纲学Python,学完就能考,第6课

跟着NOAI考纲学Python,学完就能考,第6课

本文核心观点
NOAI 自学 Python 系列第 6 课:while 循环、循环条件设计、典型死循环陷阱、while 与 for 的取舍。

跟着NOAI考纲学Python,学完就能考,第6课

每天一个知识点,带你自学NOAI,加入我们吧~

上节课的for循环适合"知道要循环几次"的情况——range(10)就是跑10次。但有些时候你不知道要循环多少次,比如:让用户猜一个数字,猜对才停。这时候就需要while循环

while:条件成立就一直跑

while的意思是"当……的时候"。只要条件成立,就一直执行循环体。

count = 1
while count <= 3:
    print("第"count"次")
    count += 1

第 1 次
第 2 次
第 3 次

拆开看执行过程:

count从1开始

检查 count <= 3?1 <= 3成立,执行循环体,打印"第 1 次",count变成2

再检查:2 <= 3成立,打印"第 2 次",count变成3

再检查:3 <= 3成立,打印"第 3 次",count变成4

再检查:4 <= 3不成立,循环结束

while和if长得很像:都是条件+冒号+缩进。区别是if只执行一次,while会反复执行直到条件不成立。

while和for怎么选?

简单记:

知道要循环几次 → 用for + range

不知道要循环几次,靠条件控制 → 用while

比如"打印10次Hello"用for更方便,"让用户一直输入直到输入quit"用while更合适。

实战:猜数字

写一个小游戏:心里想一个数(先写死为7),让用户一直猜,猜对才结束:

answer = 7
guess = 0
while guess != answer:
    guess = int(input("猜一个1到10的数:"))
    if guess > answer:
        print("大了")
    elif guess < answer:
        print("小了")
print("猜对了!")

猜一个1到10的数:3
小了
猜一个1到10的数:9
大了
猜一个1到10的数:7
猜对了!

这里while和if配合使用:while控制"猜不对就继续",if控制"给提示"。最后的 print("猜对了!") 没有缩进,在循环外面,只有猜对退出循环后才会执行。

break:提前退出循环

有时候想在循环中途直接退出,不等条件自然变成False。用break

while True:
    text = input("输入内容(输入quit退出):")
    if text == "quit":
        break
    print("你输入了:"text)

输入内容(输入quit退出):hello
你输入了: hello
输入内容(输入quit退出):quit

拆开看:

while True 条件永远成立,所以这个循环会一直跑

当用户输入"quit"时,break立刻跳出循环,后面的print不执行

while True + break是一个很常用的模式:"先进来再说,满足条件就退出"

continue:跳过这一轮

continue不是退出整个循环,而是跳过当前这一轮,直接进入下一轮。

for i in range(16):
    if i == 3:
        continue
    print(i)

1
2
4
5

当i等于3时,continue跳过了后面的print,直接进入i=4那一轮。所以输出里没有3。

break是"不干了,直接走人"。continue是"这轮不算,下一轮继续"。break和continue在for循环和while循环里都能用。

新手最容易犯的错:死循环

危险忘了让条件变化,循环永远停不下来

# 错误写法——死循环!
count = 1
while count <= 3:
    print(count)
    # 忘了写 count += 1

count永远是1,1 <= 3永远成立,程序会一直打印1,停不下来。这就叫死循环

遇到死循环别慌,在香农平台上点"停止"按钮就行。写while循环的时候,一定要确保条件最终会变成False,或者循环里有break能跳出来。

# 正确写法
count = 1
while count <= 3:
    print(count)
    count += 1    # 别忘了这一行!

动手试试

练习1:预测输出

下面这段代码,输出什么?

x = 10
while x > 0:
    print(x)
    x -= 3

提示:x从10开始,每轮减3。x依次是10、7、4、1……什么时候不满足 x > 0?

练习2:找bug

这段代码想让用户输入密码,密码正确("abc123")才放行,但它只让用户输入了一次就结束了。怎么改?

password = input("输入密码:")
if password != "abc123":
    print("密码错误")
print("登录成功")

提示:if只判断一次。想"一直问直到对了",应该用什么?

练习3:写代码

写一个程序:让用户不断输入数字,输入0时停止,最后打印所有输入的数字之和(不包括0)。

提示:用while True + break的模式。每次输入后判断是不是0,是就break,不是就累加。

自己先想,想完了香农平台上写代码跑一遍验证。

去平台上手写代码

现在你掌握了两种循环,Python的三大流程控制就齐了:顺序、选择(if)、循环(for/while)。回顾一下:

while 条件: — 条件成立就一直跑

break — 直接跳出循环

continue — 跳过这一轮,继续下一轮

这篇文章讲的是香农NOAI学习平台"Python基础"模块的第六课。平台上有更多的练习题,写完代码点运行,对不对立刻就知道。

香农NOAI学习平台
地址:shannon.arpa.school
微信扫码登录就能用,免费。
找到「Python基础」→「while循环」,从第一道题开始写。

下一篇讲列表——一个变量只能存一个值,列表能存一堆。有了列表,循环就更有用了。

微信二维码

扫码备注【NOAI】加交流群