while`循环

简介: `Python`的`while`循环在条件为真时重复执行代码块。常见用法包括:固定次数循环、无限循环(可由外部条件退出)、使用`break`和`continue`控制流程,以及等待条件满足。经典应用案例有模拟登录尝试、读取文件至末尾和实现简单聊天机器人。`while`循环适用于处理不确定次数迭代和条件触发场景。

Python中的while循环是一种基本的循环结构,它会在条件为真时反复执行代码块。while循环的语法如下:

while condition:
    # 执行代码块

这里的condition是一个布尔表达式,如果其值为True,则执行缩进的代码块。每次执行完代码块后,会重新评估条件表达式,如果仍然为True,则继续执行循环体。当条件表达式为False时,循环停止。

常见的用法

  1. 执行固定次数的循环

    count = 5
    while count > 0:
        print("Count:", count)
        count -= 1
    
  2. 无限循环

    while True:
        # 执行代码块,直到外部条件(如用户输入)触发退出
        user_input = input("Enter 'exit' to quit: ")
        if user_input == 'exit':
            break
    
  3. 使用breakcontinue语句

    numbers = [1, 2, 3, 4, 5, 6]
    while True:
        current = numbers.pop(0)
        if current == 3:
            continue  # 跳过当前迭代,继续下一次迭代
        if current > 5:
            break  # 条件不满足时退出循环
        print(current)
    
  4. 等待条件满足

    import time
    from threading import Event
    
    stop_event = Event()
    
    def stop_thread():
        stop_event.set()
    
    thread = threading.Thread(target=stop_thread)
    thread.start()
    
    while not stop_event.is_set():
        print("Thread is running...")
        time.sleep(1)
    
    print("Thread has stopped.")
    

经典的应用案例

  1. 模拟用户登录尝试
    用户有限定次数尝试登录,超过次数则锁定账户。

    MAX_ATTEMPTS = 3
    attempts = 0
    
    while attempts < MAX_ATTEMPTS:
        username = input("Enter username: ")
        password = input("Enter password: ")
        if valid_login(username, password):
            print("Login successful!")
            break
        else:
            attempts += 1
            print(f"Invalid credentials. Attempts left: {MAX_ATTEMPTS - attempts}")
    
        if attempts == MAX_ATTEMPTS:
            print("Account locked!")
            break
    
  2. 读取文件直到文件末尾
    打开一个文件,并逐行读取内容,直到文件结束。

    filename = 'example.txt'
    with open(filename, 'r') as file:
        while True:
            line = file.readline()
            if not line:
                break
            print(line, end='')  # 打印每一行内容
    
  3. 实现简单的聊天机器人
    允许用户与机器人对话,直到用户选择退出。

    print("Welcome to the chatbot! Type 'exit' to quit.")
    
    while True:
        message = input("You: ")
        if message.lower() == 'exit':
            print("Chatbot: Goodbye!")
            break
        response = chatbot_response(message)
        print(f"Chatbot: {response}")
    

while循环是处理不确定次数的迭代和等待特定条件发生时的理想选择。通过结合breakcontinue语句,可以灵活地控制循环的执行流程。

目录
相关文章
|
11月前
|
存储 监控 固态存储
Hyper-V启动慢卡顿,专业解决
针对Hyper-V启动慢卡顿问题,可采取以下优化措施:1. 硬件资源检查与优化,如内存和CPU的合理分配;2. 虚拟机设置调整,包括虚拟硬盘管理和启用动态内存;3. 网络设置优化,确保虚拟交换机配置正确;4. 系统服务管理,禁用不必要的服务;5. 安装最新系统更新并检查兼容性;6. 启用快速启动和清理系统垃圾文件。综合应用这些方法,能有效提升Hyper-V的启动速度和性能。
|
云安全 存储 监控
云计算安全:AWS与Azure的安全策略与实践比较
【10月更文挑战第26天】本文详细比较了AWS和Azure在安全性方面的策略和实践,涵盖身份与访问管理、数据加密与保护以及安全监控与响应。通过代码示例展示了两家云服务提供商在实际应用中的具体操作,帮助企业在选择云服务时做出明智决策。
346 0
|
自然语言处理 监控 程序员
本地部署企业级自适应 RAG 应用的方法与实践
本文介绍了本地部署企业级自适应RAG(Adaptive Retrieval-Augmented Generation)应用的方法与实践。RAG结合信息检索与文本生成,广泛应用于问答、编程等领域。自适应RAG通过分类器评估查询复杂度,动态选择无检索、单步检索或多步检索策略,优化生成结果。其特点在于灵活性和适应性,能够根据输入情况调整检索和生成策略。核心技术包括检索策略的自适应、生成策略的自适应以及模型参数的自适应调整。通过实战,深入了解了RAG的工作原理和应用场景,并获得了宝贵经验。
1746 4
|
数据可视化 前端开发 数据挖掘
【优秀python大屏】基于python flask的广州历史天气数据应用与可视化大屏
本文介绍了一个基于Python Flask框架的广州历史天气数据应用与可视化大屏系统,该系统通过数据采集、处理、分析和可视化技术,提供了丰富的气象数据展示和决策支持,帮助用户快速了解和应对气象变化。
661 110
【优秀python大屏】基于python flask的广州历史天气数据应用与可视化大屏
|
12月前
|
SQL 存储 算法
sql server加密算法加盐
通过在 SQL Server 中结合使用加盐和哈希,可以有效地增强密码的安全性。本文详细介绍了在 SQL Server 中如何实现密码加盐和哈希的步骤,以及相关的完整示例和注意事项。希望本文能帮助读者更好地理解和应用加密技术,提升数据库系统的安
397 7
|
缓存 Ubuntu 网络协议
ubuntu ifconfig命令找不到
通过上述指导,无论你是面临 `ifconfig`命令缺失的困惑,还是希望深入了解Ubuntu系统下的网络管理技巧,都能找到针对性的解决方案,进一步提升你的系统管理能力。
624 2
|
安全 Java Maven
使用MapStruct简化Java对象映射
在软件开发中,经常需要将一个Java对象的数据映射到另一个对象,特别是在使用DTO(Data Transfer Object)模式时。手动编写这些映射代码非常繁琐,而MapStruct可以帮助我们自动生成这些映射代码,从而提高开发效率和代码质量。
536 2
|
安全 Go Docker
Go服务Docker Pod不断重启排查和解决
该文章分享了Go服务在Docker Pod中不断重启的问题排查过程和解决方案,识别出并发写map导致fatal error的问题,并提供了使用sync.Map或concurrent-map库作为并发安全的替代方案。
299 4
|
机器学习/深度学习 计算机视觉
【YOLOv8改进】 ParameterNet:DynamicConv(Dynamic Convolution):2024最新动态卷积
**摘要** ParameterNet是新提出的框架,旨在让低FLOPs模型也能受益于大规模视觉预训练,通过动态卷积在增加参数量的同时控制计算量。动态卷积利用条件生成的卷积核增强模型适应性。在ImageNet上,ParameterNet-600M在准确性上超过Swin Transformer,且FLOPs更低。该方法也被拓展至语言领域,提升LLaMA模型性能。代码可在&lt;https://parameternet.github.io/&gt;获取。