最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中while循環(huán)常見(jiàn)用法與實(shí)戰(zhàn)代碼

 更新時(shí)間:2026年05月20日 10:13:24   作者:念恒12306  
while是Python中的條件循環(huán)語(yǔ)句,只要條件為True,就會(huì)持續(xù)執(zhí)行循環(huán)體,與for不同,while循環(huán)更適合于不確定循環(huán)次數(shù)、需要根據(jù)條件退出的場(chǎng)景,這篇文章主要介紹了Python中while循環(huán)常見(jiàn)用法與實(shí)戰(zhàn)代碼的相關(guān)資料,需要的朋友可以參考下

1.while 循環(huán)的基本概念

1.1 語(yǔ)法格式

while 條件表達(dá)式:
    循環(huán)體代碼塊
else:
    循環(huán)正常結(jié)束(沒(méi)有被 break 終止)時(shí)執(zhí)行的代碼塊
  • 條件表達(dá)式:任何能計(jì)算出布爾值的表達(dá)式。只要結(jié)果為 True,循環(huán)體就會(huì)重復(fù)執(zhí)行;一旦結(jié)果為 False,循環(huán)終止。

  • 循環(huán)體:縮進(jìn)的代碼塊,至少要有一條語(yǔ)句(可以使用 pass 占位)。

  • else 子句(可選):僅當(dāng)循環(huán)沒(méi)有被 break 終止時(shí)執(zhí)行。常用于“查找失敗”或“正常完成”的場(chǎng)景。

1.2 最簡(jiǎn)單的示例

count = 0
while count < 5:
    print(count)
    count += 1

執(zhí)行流程

  1. 初始化 count = 0。

  2. 判斷 count < 5 為 True,進(jìn)入循環(huán)體。

  3. 打印 0,然后 count 變?yōu)?nbsp;1

  4. 回到條件判斷,1 < 5 仍為 True,重復(fù)。

  5. 當(dāng) count 變?yōu)?nbsp;5 時(shí),5 < 5 為 False,循環(huán)結(jié)束。

1.3 while 與 for 的對(duì)比

特性for 循環(huán)while 循環(huán)
適用場(chǎng)景遍歷已知序列或固定次數(shù)條件控制,次數(shù)未知
循環(huán)變量自動(dòng)從可迭代對(duì)象中獲取需要手動(dòng)初始化并更新
無(wú)限循環(huán)風(fēng)險(xiǎn)極少(除非可迭代對(duì)象無(wú)限大)容易忘記更新條件導(dǎo)致無(wú)限循環(huán)
典型用途遍歷列表、字符串、range 等用戶輸入驗(yàn)證、游戲主循環(huán)、迭代收斂算法

2. 代碼執(zhí)行順序詳解

理解 while 的執(zhí)行順序是避免邏輯錯(cuò)誤的基礎(chǔ)

a = 1
while a < 3:
    print(f"開(kāi)始循環(huán),a = {a}")
    a += 1
    print(f"結(jié)束本次循環(huán),a = {a}")
print("循環(huán)結(jié)束")

開(kāi)始循環(huán),a = 1
結(jié)束本次循環(huán),a = 2
開(kāi)始循環(huán),a = 2
結(jié)束本次循環(huán),a = 3
循環(huán)結(jié)束

詳細(xì)步驟

  1. 檢查條件 a < 3(此時(shí) a=1,True)→ 進(jìn)入循環(huán)體。

  2. 執(zhí)行 print,然后 a += 1 使 a 變?yōu)?nbsp;2。

  3. 再次回到條件檢查,2 < 3 為 True,繼續(xù)第二次循環(huán)。

  4. 第二次循環(huán)中 a 從 2 變?yōu)?nbsp;3

  5. 條件檢查 3 < 3 為 False,循環(huán)終止,執(zhí)行循環(huán)外的 print。

關(guān)鍵點(diǎn):循環(huán)條件在每次循環(huán)開(kāi)始前計(jì)算,而不是在循環(huán)體中間動(dòng)態(tài)判斷。

3. 無(wú)限循環(huán)及其控制

當(dāng)條件永遠(yuǎn)為 True 時(shí),循環(huán)永遠(yuǎn)不會(huì)終止,稱為無(wú)限循環(huán)。有時(shí)我們需要無(wú)限循環(huán)(例如游戲引擎、服務(wù)器主循環(huán)),但通常我們會(huì)設(shè)置一個(gè)退出條件(如 break)。

3.1 無(wú)限循環(huán)的基本寫(xiě)法

while True:
    user_input = input("輸入 'exit' 退出: ")
    if user_input == 'exit':
        break
    print(f"你輸入了: {user_input}")

注意事項(xiàng)

  • 使用 while True 必須配合 break 退出,否則程序會(huì)永遠(yuǎn)運(yùn)行。

  • 可以在循環(huán)體內(nèi)的任何位置根據(jù)條件 break。

3.2 避免無(wú)限循環(huán)的常見(jiàn)錯(cuò)誤

# 錯(cuò)誤:忘記更新循環(huán)變量
i = 0
while i < 10:
    print(i)   # 無(wú)限循環(huán),因?yàn)?i 永遠(yuǎn)為 0

修正:確保循環(huán)條件中的變量在循環(huán)體內(nèi)被修改。

4. break、continue 與 else

4.1break:提前終止整個(gè)循環(huán)

num = 0
while num < 10:
    if num == 5:
        break
    print(num)
    num += 1
# 輸出 0,1,2,3,4

break 會(huì)立即退出循環(huán),即使條件仍為 True。

4.2continue:跳過(guò)本次循環(huán)剩余部分,進(jìn)入下一次迭代

num = 0
while num < 5:
    num += 1
    if num == 3:
        continue
    print(num)
# 輸出 1,2,4,5 (跳過(guò)了 3)

注意:在 while 循環(huán)中使用 continue 時(shí),務(wù)必確保循環(huán)變量更新在 continue 之前,否則可能導(dǎo)致無(wú)限循環(huán)。

# 錯(cuò)誤示范
i = 0
while i < 5:
    if i == 3:
        continue   # 跳過(guò) i += 1,i 永遠(yuǎn)為 3,無(wú)限循環(huán)
    print(i)
    i += 1

4.3else子句:循環(huán)正常結(jié)束時(shí)執(zhí)行

else 塊僅在循環(huán)沒(méi)有被 break 終止時(shí)運(yùn)行。

# 查找列表中是否包含偶數(shù)
numbers = [1, 3, 5, 7]
i = 0
while i < len(numbers):
    if numbers[i] % 2 == 0:
        print(f"找到偶數(shù) {numbers[i]}")
        break
    i += 1
else:
    print("沒(méi)有找到偶數(shù)")

因?yàn)榱斜砣瞧鏀?shù),break 未觸發(fā),else 會(huì)執(zhí)行。

5. 常見(jiàn)用法與實(shí)戰(zhàn)模式

5.1 用戶輸入驗(yàn)證(直到輸入合法)

while True:
    age_str = input("請(qǐng)輸入年齡(1-120):")
    if age_str.isdigit():
        age = int(age_str)
        if 1 <= age <= 120:
            break
    print("輸入無(wú)效,請(qǐng)重新輸入")
print(f"您的年齡是 {age}")

5.2 模擬 do-while 循環(huán)

Python 沒(méi)有內(nèi)置的 do-while(先執(zhí)行一次再判斷條件)??梢杂?nbsp;while True + break 模擬:

while True:
    # 循環(huán)體至少執(zhí)行一次
    response = input("繼續(xù)嗎?(y/n): ")
    if response == 'n':
        break

5.3 迭代收斂(數(shù)值計(jì)算,如牛頓迭代)

def sqrt_newton(n, tolerance=1e-6):
    guess = n / 2
    while abs(guess * guess - n) > tolerance:
        guess = (guess + n / guess) / 2
    return guess

print(sqrt_newton(2))   # 約 1.414213562

5.4 遍歷自定義迭代器(手動(dòng)模擬 for)

it = iter([1, 2, 3])
while True:
    try:
        x = next(it)
        print(x)
    except StopIteration:
        break

5.5 倒計(jì)時(shí)與延遲

import time
countdown = 5
while countdown > 0:
    print(countdown)
    time.sleep(1)
    countdown -= 1
print("發(fā)射!")

6. 高級(jí)擴(kuò)展與性能優(yōu)化

6.1 使用while與else實(shí)現(xiàn)查找算法

在數(shù)據(jù)流中查找滿足條件的元素,若找到則處理,若未找到則執(zhí)行備選操作。

def find_first(predicate, iterable):
    it = iter(iterable)
    while True:
        try:
            item = next(it)
        except StopIteration:
            break
        if predicate(item):
            return item
    else:          # 這里 while-else 中的 else 表示“從未 break”
        return None

print(find_first(lambda x: x > 10, [1,5,3]))   # None
print(find_first(lambda x: x > 10, [1,15,3]))  # 15

6.2while與生成器配合處理大文件

逐行讀取大文件,避免一次性加載到內(nèi)存:

with open('large_file.txt') as f:
    while True:
        line = f.readline()
        if not line:
            break
        process(line)

更 Pythonic 的方式是 for line in f:,但 while 方式能讓你在讀取過(guò)程中靈活控制(例如跳過(guò)、回溯等)。

6.3 性能注意事項(xiàng)

避免在循環(huán)內(nèi)重復(fù)計(jì)算不變的值:將常量提到循環(huán)外。

# 不推薦
while i < len(data):
    do_something(i, len(data))
    i += 1

# 推薦
n = len(data)
while i < n:
    do_something(i, n)
    i += 1
  • 盡量使用局部變量:在循環(huán)內(nèi)頻繁訪問(wèn)全局變量或?qū)傩詴?huì)比局部變量慢。

  • 對(duì)于大量數(shù)值計(jì)算,考慮使用 NumPy 向量化,避免 Python 級(jí)別的循環(huán)。

6.4while與遞歸

任何 while 循環(huán)都可以改寫(xiě)為遞歸,但遞歸受限于調(diào)用棧深度。一般情況下 while 更高效且無(wú)棧溢出風(fēng)險(xiǎn)。

# 遞歸版本(不推薦用于大數(shù)據(jù)量)
def countdown(n):
    if n <= 0:
        print("發(fā)射")
    else:
        print(n)
        countdown(n-1)

# while 版本
def countdown_while(n):
    while n > 0:
        print(n)
        n -= 1
    print("發(fā)射")

6.5while循環(huán)中的指針技巧(模擬 C 語(yǔ)言風(fēng)格)

雖然 Python 不提倡,但有時(shí)需要手動(dòng)控制索引:

# 刪除列表中所有特定值(原地修改)
lst = [1, 2, 3, 2, 4, 2]
i = 0
while i < len(lst):
    if lst[i] == 2:
        lst.pop(i)
    else:
        i += 1
print(lst)   # [1, 3, 4]

注意:pop 會(huì)改變列表長(zhǎng)度,索引管理需要小心。更簡(jiǎn)單的做法是列表推導(dǎo)式。

7. 常見(jiàn)陷阱與避坑指南

陷阱錯(cuò)誤示例解決方案
無(wú)限循環(huán)while i < 10: 但未更新 i確保循環(huán)條件中的變量在循環(huán)體內(nèi)改變
continue 跳過(guò)更新while i < 5: if cond: continue; i+=1將 i+=1 放在 continue 之前
忘記處理迭代器耗盡while True: x = next(it) 無(wú) StopIteration 捕獲使用 try-except 或改用 for
使用 = 而不是 == 作為條件while x = 5:(語(yǔ)法錯(cuò)誤)使用 == 比較
在 while 內(nèi)修改正在遍歷的列表導(dǎo)致索引錯(cuò)亂遍歷副本或使用其他結(jié)構(gòu)
整數(shù)溢出(Python 中不存在)-Python 整數(shù)無(wú)限精度,但其他語(yǔ)言需注意

到此這篇關(guān)于Python中while循環(huán)常見(jiàn)用法與實(shí)戰(zhàn)代碼的文章就介紹到這了,更多相關(guān)Python中while循環(huán)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python檢測(cè)空間儲(chǔ)存剩余大小和指定文件夾內(nèi)存占用的實(shí)例

    python檢測(cè)空間儲(chǔ)存剩余大小和指定文件夾內(nèi)存占用的實(shí)例

    今天小編就為大家分享一篇python檢測(cè)空間儲(chǔ)存剩余大小和指定文件夾內(nèi)存占用的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • python實(shí)現(xiàn)圖像降噪

    python實(shí)現(xiàn)圖像降噪

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)圖像降噪,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • python數(shù)據(jù)預(yù)處理 :樣本分布不均的解決(過(guò)采樣和欠采樣)

    python數(shù)據(jù)預(yù)處理 :樣本分布不均的解決(過(guò)采樣和欠采樣)

    今天小編就為大家分享一篇python數(shù)據(jù)預(yù)處理 :樣本分布不均的解決(過(guò)采樣和欠采樣),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • python實(shí)現(xiàn)合并兩個(gè)有序列表的示例代碼

    python實(shí)現(xiàn)合并兩個(gè)有序列表的示例代碼

    這篇文章主要介紹了python實(shí)現(xiàn)合并兩個(gè)有序列表的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Python網(wǎng)絡(luò)爬蟲(chóng)之Web網(wǎng)頁(yè)基礎(chǔ)

    Python網(wǎng)絡(luò)爬蟲(chóng)之Web網(wǎng)頁(yè)基礎(chǔ)

    我們?cè)趯W(xué)習(xí)爬蟲(chóng)之前,要先了解網(wǎng)頁(yè)的組成,只有我們了解其組成嗎,才可以方能百戰(zhàn)百勝,文章中有詳細(xì)的代碼示例,需要的朋友可以參考一下
    2023-04-04
  • PyQt6/PySide6 的 QPropertyAnimation 類適用場(chǎng)景分析

    PyQt6/PySide6 的 QPropertyAnimation 類適用場(chǎng)景分析

    QGraphicsView和QGraphicsScene是Qt圖形視圖框架的核心類,用于構(gòu)建高性能、可交互的2D圖形界面,QGraphicsView 和 QGraphicsScene 為復(fù)雜圖形應(yīng)用提供了強(qiáng)大支持,本文給大家介紹PyQt6/PySide6 的 QPropertyAnimation 類,感興趣的朋友一起看看吧
    2025-03-03
  • Django時(shí)區(qū)詳解

    Django時(shí)區(qū)詳解

    這篇文章主要介紹了Django時(shí)區(qū)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 精選20個(gè)好玩又實(shí)用的的Python實(shí)戰(zhàn)項(xiàng)目(有圖文代碼)

    精選20個(gè)好玩又實(shí)用的的Python實(shí)戰(zhàn)項(xiàng)目(有圖文代碼)

    文章介紹了20個(gè)實(shí)用Python項(xiàng)目,涵蓋游戲開(kāi)發(fā)、工具應(yīng)用、圖像處理、機(jī)器學(xué)習(xí)等,使用Tkinter、PIL、OpenCV、Kivy等庫(kù)實(shí)現(xiàn)功能,適合學(xué)習(xí)和練習(xí),項(xiàng)目包括猜字游戲、鬧鐘、二維碼生成、語(yǔ)言檢測(cè)、音樂(lè)播放器等,用戶可直接pip安裝所需庫(kù)并動(dòng)手實(shí)踐
    2025-08-08
  • python神經(jīng)網(wǎng)絡(luò)MobileNet模型的復(fù)現(xiàn)詳解

    python神經(jīng)網(wǎng)絡(luò)MobileNet模型的復(fù)現(xiàn)詳解

    這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡(luò)MobileNet模型的復(fù)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • Django中使用MySQL5.5的教程

    Django中使用MySQL5.5的教程

    這篇文章主要介紹了Django中使用MySQL5.5的教程,本文圖文實(shí)例詳解的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-12-12

最新評(píng)論

璧山县| 平凉市| 凉山| 抚宁县| 当涂县| 海伦市| 类乌齐县| 嘉峪关市| 侯马市| 万州区| 武汉市| 承德县| 长治市| 河津市| 黄梅县| 德化县| 苍梧县| 四子王旗| 红河县| 河曲县| 兴安盟| 吴川市| 舟曲县| 南皮县| 邛崃市| 娄烦县| 勃利县| 隆回县| 祁阳县| 凤翔县| 杭锦旗| 淄博市| 临澧县| 汝州市| 临漳县| 古交市| 靖边县| 沧源| 弋阳县| 虎林市| 滨海县|