Python控制结构详解

news2025/4/1 13:06:44

前言

一、控制结构概述

二、顺序结构

三、选择结构(分支结构)

1. 单分支 if

2. 双分支 if-else

3. 多分支 if-elif-else

4.实际应用:

四、循环结构

1. for循环

2. while循环

3. 循环控制语句

五、异常处理(try-except)

六、综合应用示例

场景1:

场景2:

前言

这部分内容之前写过,但感觉不是特别好,不方便以后翻阅,所以重新整理。有问题欢迎随时指正。

一、控制结构概述

Python的控制结构分为三种基本类型:顺序结构选择结构(分支结构) 和 循环结构。它们决定了代码的执行流程和逻辑。

二、顺序结构

定义:代码按书写顺序从上到下逐行执行,无分支或循环。
示例

# 变量赋值与打印输出
name = "Alice"
age = 25
print(f"Name: {name}, Age: {age}")

三、选择结构(分支结构)

根据条件判断结果,选择不同代码块执行。

1. 单分支 if

# 判断数字正负
num = -5
if num > 0:
    print("正数")

2. 双分支 if-else

# 根据成绩输出等级
score = 85
if score >= 90:
    print("优秀")
else:
    print("需努力")

3. 多分支 if-elif-else

# 判断数字能否被2、3、5整除
num = 15
if num % 2 == 0:
    print("能被2整除")
elif num % 3 == 0:
    print("能被3整除")
elif num % 5 == 0:
    print("能被5整除")
else:
    print("不能被2、3、5整除")

4.实际应用:

用户权限验证

user_role = "admin"
if user_role == "admin":
    print("显示所有管理功能")
elif user_role == "editor":
    print("显示编辑面板")
else:
    print("仅限浏览模式")

四、循环结构

重复执行某段代码,分为for循环和while循环。

1. for循环

# 遍历列表
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
    print(fruit)

# 遍历字典
person = {"name": "Bob", "age": 30}
for key, value in person.items():
    print(f"{key}: {value}")

# 使用range函数
for i in range(5):  # 输出0-4
    print(i)

实际应用:批量文件重命名

files = ["report.txt", "image.jpg", "data.csv"]
for filename in files:
    if filename.endswith(".txt"):
        print(f"处理文本文件: {filename}")

2. while循环

# 计算1-10的和
sum = 0
i = 1
while i <= 10:
    sum += i
    i += 1
print(f"和为: {sum}")

实际应用:API请求重试机制

max_retries = 3
retries = 0
while retries < max_retries:
    response = make_api_request()
    if response.success:
        break
    retries += 1
else:
    print("请求失败,已达最大重试次数")

3. 循环控制语句

  • break:立即退出循环。
  • continue:跳过当前迭代,进入下一次循环。
# 查找第一个能被7整除的数
numbers = [12, 15, 18, 21, 24]
for num in numbers:
    if num % 7 == 0:
        print(f"找到: {num}")
        break

# 输出1-10中的奇数
for i in range(1, 11):
    if i % 2 == 0:
        continue
    print(i)

五、异常处理(try-except

try:
    # 可能出错的代码
except ExceptionType:
    # 处理异常
finally:
    # 无论是否异常都会执行

实际应用:安全除法计算

def safe_divide(a, b):
    try:
        result = a / b
    except ZeroDivisionError:
        print("错误:除数不能为零")
        return None
    except TypeError:
        print("错误:输入必须为数字")
        return None
    else:
        print(f"结果为:{result}")
        return result
    finally:
        print("计算完成")

safe_divide(10, 2)   # 正常输出
safe_divide(5, 0)    # 触发ZeroDivisionError

六、综合应用示例

场景1

简易购物车系统

cart = []
prices = {"apple": 5.0, "banana": 3.5, "milk": 8.0}

while True:
    print("\n1. 添加商品 2. 查看购物车 3. 结账 4. 退出")
    choice = input("请选择操作:")

    if choice == "1":
        item = input("输入商品名称:").lower()
        if item in prices:
            cart.append(item)
            print(f"{item} 已加入购物车")
        else:
            print("商品不存在!")

    elif choice == "2":
        print("购物车内容:")
        for item in set(cart):
            print(f"{item}: {cart.count(item)}件")

    elif choice == "3":
        total = sum(prices[item] for item in cart)
        print(f"总金额:{total:.2f}元")
        break

    elif choice == "4":
        print("感谢使用!")
        break

    else:
        print("无效的输入,请重试")

场景2:

猜数字游戏

import random

secret_number = random.randint(1, 100)
attempts = 0
max_attempts = 5

print("欢迎来到猜数字游戏!数字在1-100之间。")

while attempts < max_attempts:
    guess = int(input("请输入你的猜测: "))
    attempts += 1

    if guess < secret_number:
        print("太小了!")
    elif guess > secret_number:
        print("太大了!")
    else:
        print(f"恭喜你!用了{attempts}次猜中了数字{secret_number}。")
        break
else:
    print(f"很遗憾,机会用完了。正确答案是{secret_number}。")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2324326.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WebSocket通信的握手阶段

1. 客户端建立连接时&#xff0c;通过 http 发起请求报文&#xff0c;报文表示请求服务器端升级协议为 WebSocket&#xff0c;与普通的 http 请求协议略有区别的部分在于如下的这些协议头&#xff1a; 上述两个字段表示请求服务器端升级协议为 websocket 协议。 2. 服务器端响…

分布式ID服务实现全面解析

分布式ID生成器是分布式系统中的关键基础设施&#xff0c;用于在分布式环境下生成全局唯一的标识符。以下是各种实现方案的深度解析和最佳实践。 一、核心需求与设计考量 1. 核心需求矩阵 需求 重要性 实现难点 全局唯一 必须保证 时钟回拨/节点冲突 高性能 高并发场景…

dom0运行android_kernel: do_serror of panic----failed to stop secondary CPUs 0

问题描述&#xff1a; 从日志看出,dom0运行android_kernel&#xff0c;刚开始运行就会crash,引发panic 解决及其原因分析&#xff1a; 最终问题得到解决&#xff0c;发现是前期在调试汇编阶段代码时&#xff0c;增加了汇编打印的指令&#xff0c;注释掉这些指令,问题得到解决。…

HarmonyOS NEXT——【鸿蒙原生应用加载Web页面】

鸿蒙客户端加载Web页面&#xff1a; 在鸿蒙原生应用中&#xff0c;我们需要使用前端页面做混合开发&#xff0c;方法之一是使用Web组件直接加载前端页面&#xff0c;其中WebView提供了一系列相关的方法适配鸿蒙原生与web之间的使用。 效果 web页面展示&#xff1a; Column()…

优选算法的慧根之翼:位运算专题

专栏&#xff1a;算法的魔法世界 个人主页&#xff1a;手握风云 一、位运算 基础位运算 共包含6种&(按位与&#xff0c;有0就是0)、|(按位或有1就是1)、^(按位异或&#xff0c;相同为0&#xff0c;相异为1)、~(按位取反&#xff0c;0变成1&#xff0c;1变成0)、<<(左…

图论问题集合

图论问题集合 寻找特殊有向图&#xff08;一个节点最多有一个出边&#xff09;中最大环路问题特殊有向图解析算法解析步骤 1 &#xff1a;举例分析如何在一个连通块中找到环并使用时间戳计算大小步骤 2 &#xff1a;抽象成算法注意 实现 寻找特殊有向图&#xff08;一个节点最多…

【数据结构】栈 与【LeetCode】20.有效的括号详解

目录 一、栈1、栈的概念及结构2、栈的实现3、初始化栈和销毁栈4、打印栈的数据5、入栈操作---栈顶6、出栈---栈顶6.1栈是否为空6.2出栈---栈顶 7、取栈顶元素8、获取栈中有效的元素个数 二、栈的相关练习1、练习2、AC代码 个人主页&#xff0c;点这里~ 数据结构专栏&#xff0c…

Redis设计与实现-哨兵

哨兵模式 1、启动并初始化sentinel1.1 初始化服务器1.2 使用Sentinel代码1.3 初始化sentinel状态1.4 初始化sentinel状态的master属性1.5 创建连向主服务器的网络连接 2、获取主服务器信息3、获取从服务器的信息4、向主从服务器发送信息5、接受主从服务器的频道信息6、检测主观…

C++进阶——封装哈希表实现unordered_map/set

与红黑树封装map/set基本相似&#xff0c;只是unordered_map/set是单向迭代器&#xff0c;模板多传一个HashFunc。 目录 1、源码及框架分析 2、模拟实现unordered_map/set 2.1 复用的哈希表框架及Insert 2.2 iterator的实现 2.2.1 iteartor的核心源码 2.2.2 iterator的实…

【算法day25】 最长有效括号——给你一个只包含 ‘(‘ 和 ‘)‘ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。

32. 最长有效括号 给你一个只包含 ‘(’ 和 ‘)’ 的字符串&#xff0c;找出最长有效&#xff08;格式正确且连续&#xff09;括号子串的长度。 https://leetcode.cn/problems/longest-valid-parentheses/ 2.方法二&#xff1a;栈 class Solution { public:int longestValid…

Jenkins + CICD流程一键自动部署Vue前端项目(保姆级)

git仓库地址&#xff1a;参考以下代码完成,或者采用自己的代码。 南泽/cicd-test 拉取项目代码到本地 使用云服务器或虚拟机采用docker部署jenkins 安装docker过程省略 采用docker部署jenkins&#xff0c;注意这里的命令&#xff0c;一定要映射docker路径&#xff0c;否则无…

一款超级好用且开源免费的数据可视化工具——Superset

认识Superset 数字经济、数字化转型、大数据等等依旧是如今火热的领域&#xff0c;数据工作有一个重要的环节就是数据可视化。 看得见的数据才更有价值&#xff01; 现如今依旧有多数企业号称有多少多少数据&#xff0c;然而如果这些数据只是呆在冷冰冰的数据库或文件内则毫无…

RedHatLinux(2025.3.22)

1、创建/www目录&#xff0c;在/www目录下新建name和https目录&#xff0c;在name和https目录下分别创建一个index.htm1文件&#xff0c;name下面的index.html 文件中包含当前主机的主机名&#xff0c;https目录下的index.htm1文件中包含当前主机的ip地址。 &#xff08;1&…

【C++篇】类与对象(上篇):从面向过程到面向对象的跨越

&#x1f4ac; 欢迎讨论&#xff1a;在阅读过程中有任何疑问&#xff0c;欢迎在评论区留言&#xff0c;我们一起交流学习&#xff01; &#x1f44d; 点赞、收藏与分享&#xff1a;如果你觉得这篇文章对你有帮助&#xff0c;记得点赞、收藏&#xff0c;并分享给更多对C感兴趣的…

智慧运维平台:赋能未来,开启高效运维新时代

在当今数字化浪潮下&#xff0c;企业IT基础设施、工业设备及智慧城市系统的复杂度与日俱增&#xff0c;传统人工运维方式已难以满足高效、精准、智能的管理需求。停机故障、低效响应、数据孤岛等问题直接影响企业运营效率和成本控制。大型智慧运维平台&#xff08;AIOps, Smart…

基于大语言模型的智能音乐创作系统——从推荐到生成

一、引言&#xff1a;当AI成为音乐创作伙伴 2023年&#xff0c;一款由大语言模型&#xff08;LLM&#xff09;生成的钢琴曲《量子交响曲》在Spotify冲上热搜&#xff0c;引发音乐界震动。传统音乐创作需要数年专业训练&#xff0c;而现代AI技术正在打破这一壁垒。本文提出一种…

Reactive编程:什么是Reactive编程?Reactive编程思想

文章目录 **1. Reactive编程概述****1.1 什么是Reactive编程&#xff1f;****1.1.1 Reactive编程的定义****1.1.2 Reactive编程的历史****1.1.3 Reactive编程的应用场景****1.1.4 Reactive编程的优势** **1.2 Reactive编程的核心思想****1.2.1 响应式&#xff08;Reactive&…

深度剖析:U盘突然无法访问的数据拯救之道

一、引言 在数字化办公与数据存储日益普及的当下&#xff0c;U盘凭借其小巧便携、即插即用的特性&#xff0c;成为了人们工作、学习和生活中不可或缺的数据存储工具。然而&#xff0c;U盘突然无法访问这一棘手问题却时常困扰着广大用户&#xff0c;它不仅可能导致重要数据的丢失…

蓝桥杯-特殊的三角形(dfs/枚举/前缀和)

思路分析 深度优先搜索&#xff08;DFS&#xff09;思路 定义与参数说明 dfs 函数中&#xff0c;last 记录上一条边的长度&#xff0c;用于保证新选边长度大于上一条边&#xff0c;实现三边互不相等 。cnt 记录已选边的数量&#xff0c;当 cnt 达到 3 时&#xff0c;就构成了…

一文详解k8s体系架构知识

0.云原生 1.k8s概念 1. k8s集群的两种管理角色 Master&#xff1a;集群控制节点&#xff0c;负责具体命令的执行过程。master节点通常会占用一股独立的服务器&#xff08;高可用部署建议用3台服务器&#xff09;&#xff0c;是整个集群的首脑。 Master节点一组关键进程&#xf…