Python基础 2 - 程序控制流语句

2024-08-28 09:20

本文主要是介绍Python基础 2 - 程序控制流语句,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!



文章目录

  • 一、程序控制流语句
  • 二、if 判断语句
    • 1、单、双分支 if 条件格式
    • 2、多分支 if 条件格式:
    • 3、if 判断语句的嵌套
    • 4、 三元操作符
  • 三、 循环语句
    • 1、while 循环
    • 2、for 循环
      • 延伸:列表推导式
    • 3、循环中断
    • 4、使用循环常见的错误和陷阱



  大家好,我是技术界的小萌新,今天要和大家分享一些干货。在阅读之前请先点赞👍,给我一点鼓励吧!这对我来说很重要 (*^▽^*)


一、程序控制流语句

  在Python中,ifwhilefor 这些关键字用于控制程序的执行流程,它们统称为控制流语句

  (Control Flow Statements)。

  • if 语句用于基于条件判断来执行不同的代码分支。
  • while 循环用于在满足特定条件时重复执行一段代码。
  • for 循环用于遍历序列(如列表、元组、字典等)中的每个元素,执行代码块。

  这些控制流语句是编程中实现逻辑控制和决策的基本结构。


二、if 判断语句

1、单、双分支 if 条件格式

  if 条件判断:

    条件成立 True 时执行的代码

  else:

    条件不成立 False 时执行代码


2、多分支 if 条件格式:

  if 条件1:

  elif 条件2:

  elif 条件3:

  else:

    所有条件不满足时执行语句

提醒:

多个 elif 之间是互斥有序的,上一个条件满足后就不会在进行后续判断。


3、if 判断语句的嵌套

  表示多个 if 判断成功、失败的嵌套分支,用于多条件、多层次的逻辑判断。

if 条件1:语句1语句2if 条件1.1:条件1满足,条件1.1满足后执行语句elif:条件1.1不满足后执行语句
elif 条件2:条件1不满足、条件2满足后执行语句
else:所有条件不满足时执行语句

提醒:

注意每个判断块之间的层次关系


4、 三元操作符

  Python中的三元操作符(ternary operator)是一种简洁的表达式处理方式,可以根据语句结果进行赋值if-else的逻辑是简洁的,它在单行中根据条件是否满足来选择两个值中的一个进行赋值。如下示例:

x = 10
y = 20
result = x if x > y else y
print(result)打印:
20
  • x > y (condition)是一个布尔表达式,它会被评估为TrueFalse
  • 如果条件True ,则result将被赋予值 x
  • 如果条件False,则result将被赋予值 y

  这种表达式在很多编程语言中都有,但在 Python 中使用时,它特别简洁,因为它避免了需要写完整的if-else语句。

  其他应用场景

  • 根据条件改变函数的返回值 return

    def get_message(status):return "Success" if status else "Failure"
    
  • 简化其他复杂表达式需要进行if-else逻辑判断的情景:

    value = 5
    print("Greater than 3" if value > 3 else "3 or less")
    

    注意:

    • 条件表达式应该尽量保持简单,如果逻辑过于复杂,使用完整的 if-else 语句可能更清晰。
    • 条件表达式的结果可以是任何类型的表达式,不仅限于返回两个值

三、 循环语句

1、while 循环

  while 条件:

    语句1

    语句2

  • 直到条件不满足时结束循环,即条件为真循环。条件为 bool 布尔类型, True 为真循环,False 为假跳出循环。
# 二分法循环猜数游戏
def computer_guesses_number():# 设置数字范围lower_bound = 1upper_bound = 100attempts = 0print("欢迎来到猜数字游戏!")print(f"请在心里想好一个 {lower_bound} 到 {upper_bound} 之间的数字。")input("按 Enter 键继续...")while lower_bound <= upper_bound:attempts += 1# 使用二分法进行猜测guess = (lower_bound + upper_bound) // 2print(f"我的猜测是: {guess}")feedback = input("如果猜得太高,请输入 'H';如果猜得太低,请输入 'L';如果猜对了,请输入 'C': ").upper()if feedback == 'H':upper_bound = guess - 1elif feedback == 'L':lower_bound = guess + 1elif feedback == 'C':print(f"太棒了!我猜中了你的数字 {guess}!")print(f"我总共猜了 {attempts} 次。")returnelse:print("无效输入,请输入 'H', 'L' 或 'C'。")# 运行游戏
computer_guesses_number()
  • 两个 while 可以进行循环嵌套。
# 经典打印99乘法表
i=1
while i<=9:  # 外循环控制 行数j=1while j<=i:  # 内循环控制 列数print(f"{j} * {i} = {i*j}\t",end='')  # 给 end 传参,一行多个输出不换行,\t 控制格式每个输出控制对其格式j+=1print()i+=1

2、for 循环

  while 特点:循环条件自定义,可自行控制循环条件。

  for 特点:for 循环本质是一种 “轮询” 机制,对一批数据集进行 “逐个处理”,无法自定义循环条件。

  基础语法:

  for 临时变量 in 待处理数据集:

    循环执行的代码

延伸:列表推导式

  列表推导式(List Comprehension)是 Python 中一种优雅且简洁的构建列表的方法,它提供了一种基于现有列表(或其他可迭代对象)创建新列表的表达式。列表推导式通常用于从一个列表中选择、过滤或应用函数变换元素,并生成一个新的列表。

  基本语法:

新的列表 = [表达式 for 变量 in 可迭代对象 if 条件 ]	  # if 条件 (可选)
  • 表达式:对每个元素进行的操作或计算。
  • 变量:在可迭代对象中遍历的元素的临时变量。
  • 可迭代对象:要遍历的列表、元组、字典等。
  • 条件(可选):一个布尔表达式,用于过滤可迭代对象中的元素,if 条件为真时,可迭代对象中的变量才可应用到表达式中。

  示例:

  1) 简单列表推导式: 从一个范围中创建一个新列表,包含平方的数字:

squares = [x**2 for x in range(10)] # range(10) = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],从 0 计数无下标 10
print(squares) 打印:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

  2) 带条件的列表推导式:创建一个新列表,只包含原列表中的偶数:

original_list = [1, 2, 3, 4, 5, 6]
even_numbers = [num for num in original_list if num % 2 == 0]
print(even_numbers)  打印:
[2, 4, 6]

  3) 嵌套列表推导式:创建一个二维列表,其中包含乘法表:

multiplication_table = [[x * y for y in range(1, 11)] for x in range(1, 6)]
print(multiplication_table)打印:
[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],[2, 4, 6, 8, 10, 12, 14, 16, 18, 20],[3, 6, 9, 12, 15, 18, 21, 24, 27, 30],[4, 8, 12, 16, 20, 24, 28, 32, 36, 40],[5, 10, 15, 20, 25, 30, 35, 40, 45, 50]
]

  列表推导式的优点包括:

  • 简洁性:可以用一行代码完成列表的创建和变换。
  • 可读性:对于简单的操作,列表推导式比传统的for循环更易读。
  • 性能:在某些情况下,列表推导式比等价的for循环执行更快。

  然而,也要注意不要过度使用列表推导式,特别是当逻辑变得复杂或难以理解时,传统的for循环可能更清晰。此外,列表推导式不适用于非常大的数据集,因为它们会一次性在内存中创建整个列表,这可能会导致性能问题或内存不足。在这些情况下,生成器表达式可能是更好的选择。


3、循环中断

  continue: 中断当前块当前次的循环,进入下一次循环。

  break: 中断当前循环块的循环,进入循环体外执行后续代码。


4、使用循环常见的错误和陷阱

  在使用控制流语句时,开发者可能会遇到一些常见的错误和陷阱。了解这些潜在问题可以帮助你编写更健壮和可靠的代码。以下是一些常见的错误和如何避免它们:

  1. 无限循环:
    • 错误:在whilefor循环中,如果循环条件永远为真,或者没有适当的退出机制,将导致无限循环。
    • 避免方法:确保循环有条件检查并在适当的时候使用break语句退出循环。
  2. 越界访问:
    • 错误:在使用索引访问序列(如列表、元组)时,如果索引超出了序列的范围,将抛出IndexError
    • 避免方法:在使用索引之前检查它是否在有效范围内。
  3. 逻辑错误:
    • 错误:在if-else语句中,错误的逻辑判断可能导致代码执行错误的分支。
    • 避免方法:仔细检查条件表达式,并使用更多的条件测试来验证逻辑。
  4. 嵌套循环的复杂性:
    • 错误:过度嵌套的循环可能导致代码难以理解和维护,也可能产生性能问题。
    • 避免方法:尽可能简化循环结构,使用函数或列表推导式来代替复杂的嵌套。
  5. 资源未释放:
    • 错误:在使用try-except语句时,如果没有正确地管理资源,如文件句柄或网络连接,可能会导致资源泄露。
    • 避免方法:使用finally子句或上下文管理器(with语句)来确保资源被正确关闭。
  6. 异常处理不全面:
    • 错误:在try-except块中,如果没有捕获所有可能的异常,或者捕获了异常但没有适当的错误处理逻辑,可能会导致程序崩溃或产生不可预料的行为。
    • 避免方法:捕获预期的异常,并提供清晰的错误处理逻辑。
  7. 继续(continue)使用不当:
    • 错误:在循环中使用continue可能会跳过某些重要的执行步骤,导致逻辑错误。
    • 避免方法:谨慎使用continue,并确保它不会影响循环的预期行为。
  8. 变量作用域问题:
    • 错误:在嵌套的控制流结构中,变量的作用域可能不明确,导致意外的覆盖或访问。
    • 避免方法:明确变量的作用域,使用局部变量或通过闭包来保持状态。
  9. 循环中的可变迭代器:
    • 错误:在循环中修改正在迭代的可变序列(如列表),可能会导致不可预料的行为。
    • 避免方法:在循环中迭代副本或使用其他数据结构,如元组或集合。
  10. 条件表达式滥用:
    • 错误:过度使用条件表达式(三元操作符)可能会使代码难以阅读,尤其是在复杂的表达式中。
    • 避免方法:对于简单的条件,使用条件表达式;对于复杂的逻辑,使用完整的if-else语句。
  11. 循环中断(break)的误用:
    • 错误:在嵌套循环中使用break可能只退出内层循环,而不是所有循环。
    • 避免方法:明确break的意图,并在需要退出所有循环时使用标志变量或异常。

  通过了解这些常见的错误和陷阱,你可以更加小心地使用控制流语句,并编写出更加健壮和易于维护的代码。此外,编写单元测试和进行代码审查也是预防和发现这些错误的有效方法。


  文章到这里就结束了,希望我的分享能为你的技术之旅增添一抹亮色。如果你喜欢这篇文章,请点赞收藏支持我,给予我前行的动力!🚀



这篇关于Python基础 2 - 程序控制流语句的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

基于Python打造一个可视化FTP服务器

《基于Python打造一个可视化FTP服务器》在日常办公和团队协作中,文件共享是一个不可或缺的需求,所以本文将使用Python+Tkinter+pyftpdlib开发一款可视化FTP服务器,有需要的小... 目录1. 概述2. 功能介绍3. 如何使用4. 代码解析5. 运行效果6.相关源码7. 总结与展望1

使用Python实现一键隐藏屏幕并锁定输入

《使用Python实现一键隐藏屏幕并锁定输入》本文主要介绍了使用Python编写一个一键隐藏屏幕并锁定输入的黑科技程序,能够在指定热键触发后立即遮挡屏幕,并禁止一切键盘鼠标输入,这样就再也不用担心自己... 目录1. 概述2. 功能亮点3.代码实现4.使用方法5. 展示效果6. 代码优化与拓展7. 总结1.

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

Python基础文件操作方法超详细讲解(详解版)

《Python基础文件操作方法超详细讲解(详解版)》文件就是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位,文件的核心操作就是读和写,:本文主要介绍Python基础文件操作方法超详细讲解的相... 目录一、文件操作1. 文件打开与关闭1.1 打开文件1.2 关闭文件2. 访问模式及说明二、文件读写1.

Python将博客内容html导出为Markdown格式

《Python将博客内容html导出为Markdown格式》Python将博客内容html导出为Markdown格式,通过博客url地址抓取文章,分析并提取出文章标题和内容,将内容构建成html,再转... 目录一、为什么要搞?二、准备如何搞?三、说搞咱就搞!抓取文章提取内容构建html转存markdown

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Python Websockets库的使用指南

《PythonWebsockets库的使用指南》pythonwebsockets库是一个用于创建WebSocket服务器和客户端的Python库,它提供了一种简单的方式来实现实时通信,支持异步和同步... 目录一、WebSocket 简介二、python 的 websockets 库安装三、完整代码示例1.

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.