Python 程序设计

2023-8-23|2023-12-17
静水流深
静水流深
Files & media
type
status
date
slug
summary
tags
category
icon
password
Formula
File Name
URL

Python 编程概述

章节导学

Python 是一种流行的编程语言,它具有简洁、易读和灵活的特点。Python 可以用于开发各种类型的应用程序,如网站、游戏、数据分析和人工智能。Python 也是一种适合初学者的编程语言,它可以帮助我们掌握计算思维的基本概念和技能。
本课程是针对没有或者很少有编程经验的学生而设计。它旨在让学生了解计算在解决问题中的作用,以及帮助学生,能够自信地编写一些小程序,实现他们的目标。本课程将介绍 Python 的基本语法、数据类型、控制结构、函数和模块等内容,以及如何使用 Python 进行输入和输出、调试和测试等操作。本课程还将介绍一些 Python 的高级特性,如办公自动化、异常处理和文件操作等。通过本课程,学生将能够用 Python 编写简单而有效的程序,解决实际问题。

自然语言与编程语言

自然语言与编程语言是两种不同的语言类型,它们各有其特点和用途。自然语言是人类交流的工具,它具有灵活性和多样性,能够表达复杂的思想和情感。编程语言是计算机执行的工具,它具有精确性和规范性,能够实现高效的计算和控制。两者之间存在着一定的联系和差异,了解它们的异同,有助于我们更好地使用语言。
  • 自然语言是上下文相关的,编程语言是上下文无关的
    • 自然语言和编程语言的一个重要区别是,自然语言通常是上下文相关的,而编程语言通常是上下文无关的。这意味着,自然语言中的同一个词或句子,在不同的情境中可能有不同的含义或用法,需要根据上下文来理解。而编程语言中的同一个词或句子,在任何情况下都只有一个确定的含义或用法,不需要考虑上下文。例如,自然语言中的“苹果”可以指水果,也可以指公司,还可以指手机;而编程语言中的“apple”只能指一个变量名或一个常量值。
  • 自然语言是模糊的,编程语言是明确的
    • 自然语言和编程语言的另一个重要区别是,自然语言通常是模糊的,而编程语言通常是明确的。这意味着,自然语言中的词或句子可能有多种解释或理解,需要根据语境和逻辑来判断。而编程语言中的词或句子只有一种解释或理解,不需要做任何推断。例如,自然语言中的“我爱你”可以表示亲情、友情、爱情等多种情感;而编程语言中的“i love you”只能表示一个字符串值。
  • 两者相似之处
尽管自然语言和编程语言有很多不同之处,但它们也有一些相似之处。例如,它们都是由词汇、语法、语义等要素构成的;它们都可以用来表达信息、交流思想、解决问题等;它们都可以通过学习和练习来提高掌握程度等。此外,一些编程语言也借鉴了自然语言的特点,使得它们更接近人类的思维方式和表达习惯。例如,Python 是一种高级编程语言,它以简洁、优雅、易读为特点,被认为是最接近自然语言的编程语言之一。Python 有着丰富的第三方库和活跃的社区,多年来一直位居最受欢迎的编程语言榜单前三位。

自然语言编程

自然语言编程是一种利用自然语言来编写程序的技术,它旨在降低编程的门槛,提高编程的效率和可读性。自然语言编程的优点是可以让非专业的人员也能参与到软件开发中,减少了对编程语言的学习成本。自然语言编程的挑战是如何解决自然语言的二义性和不确定性,以及如何将自然语言转换为可执行的代码。目前,自然语言编程还处于发展阶段,有许多研究和应用正在进行中。
  • 使用自然语言进行编程
    • 从自然语言出发,渐进地增加对各种语法的支持,以减少学习代价和语言演化的成本。例如,Cucumber 框架就用一个很小的自然语言子集编写测试用例。
  • 使用深度学习的方法来实现自然语言编程
    • 利用神经网络来学习自然语言和代码之间的映射关系,以生成或修改代码。例如,DeepCoder 就是一个基于深度学习的程序合成系统,可以从输入输出示例中生成代码。
  • 使用知识图谱来辅助自然语言编程
    • 利用知识图谱中的实体、关系和属性来理解自然语言的意图和需求,并根据知识图谱中的规则和逻辑来生成或优化代码。例如,NL4X 就是一个基于知识图谱的自然语言编程系统,可以从自然语言描述中生成 Excel 公式。
  • 使用 LangChain Agent 进行自然语言编程
    • LangChain Agent 是一种基于用户输入动态地调用 chains 的工具,可以将问题拆分为几个步骤,然后每个步骤可以根据提供的 Agents 做相关的事情。例如,可以从自然语言描述中生成 Pandas 代码,帮助数据分析师快速、方便地进行数据处理和可视化,提高数据分析的效率和质量。

Python 的特点及应用领域

Python 的特点

Python 是一种高级的、通用的、解释型的编程语言,它具有以下几个特点:
  • 简洁明了:Python 的语法简单,代码可读性强,易于编写和维护。
  • 多范式:Python 支持多种编程范式,如面向对象、过程式、函数式和元编程等。
  • 动态类型:Python 是动态类型的语言,变量无需声明类型,运行时自动推断。
  • 丰富的库:Python 有许多标准库和第三方库,提供了各种功能和模块,可以满足不同领域的需求。
  • 可扩展性:Python 可以与其他语言(如 C、C++、Java 等)进行交互和集成,也可以通过 CPython、Jython、IronPython 等实现在不同平台上运行。

Python 的应用领域

Python 作为非常灵活和通用的语言,它可以应用于多个领域,如:
  • Web 开发:Python 可以使用 Django、Flask、Pyramid 等框架进行 Web 开发,实现网站的后端逻辑和接口。
  • 数据分析:Python 可以使用 NumPy、Pandas、SciPy 等库进行数据处理和分析,使用 Matplotlib、Seaborn、Plotly 等库进行数据可视化。
  • 机器学习:Python 可以使用 TensorFlow、PyTorch、Scikit-learn 等库进行机器学习和深度学习的建模和训练,实现人工智能的应用。
  • 脚本编程:Python 可以作为一种脚本语言,进行系统管理、文件操作、文本处理等任务。
  • 游戏开发:Python 可以使用 Pygame、Pyglet、Kivy 等库进行游戏开发,创建简单或复杂的游戏界面和逻辑。

计算思维培养

计算思维的定义

计算思维是一种在问题求解过程中运用的思维方式,它可以帮助我们把复杂的问题简化为可计算的问题,并利用计算机的强大运算能力来得到解决方案。计算思维的概念最早由卡内基·梅隆大学的周以真教授在 2006 年提出,他认为计算思维是一种基本的技能,不仅对于计算机科学家,而且对于所有的人都很重要。

计算思维的核心和编程的关系

计算思维的核心是把问题分解为小块,提炼出它们之间共通的模式,找到需要的信息,形成分步骤的解决方案。这种思维方式可以运用在几乎任何领域,无论是出行路线规划、理财投资选择、科学研究分析,还是天气预报预测,都可以通过计算思维来化繁为简,提高效率和准确性。
计算思维并不等同于编程,编程只是一种实现计算思维的工具。编程是把人的思考过程用计算机能够理解的语言表达出来,让计算机去执行具体的运算任务。Python 语言是一种简洁、易学、功能强大的编程语言,它可以帮助我们快速检验我们的计算思维是否合理有效。

计算思维解决问题的步骤

在用计算思维解决问题时,我们需要遵循以下四个步骤:
  1. 把实际问题抽象为数学问题,并建模。这一步是将人对问题的理解用数学语言描述出来,例如用方程式、图形、表格等方式。
  1. 进行映射,把数学模型中的变量等用特定的符号代替。这一步是用符号一一对应数学模型中的变量和规则等,例如用 x、y、z 等字母表示未知数,用 +、-、*、/ 等符号表示运算符。
  1. 通过编程把解决问题的逻辑分析过程写成算法。这一步是把解题思路变成计算机指令,也就是算法。算法是一系列有序、明确、可执行的步骤,它可以指导计算机如何完成特定的任务。
  1. 执行算法,进行求解。这一步是让计算机根据算法,一步步完成相应指令,求出结果。这一步可以检验我们的算法是否正确,以及我们的结果是否符合预期。
通过这四个步骤,我们就可以利用计算思维和编程来解决各种实际问题了。几乎所有的能实现一定功能的程序都有输入(Input),处理(Process)和输出(Output),那么用计算机解决生活中的具体任务时,就需要我们先采用自顶向下,逐步求精的方法,将任务分解为各个子任务,直到这些子任务能够用基本指令执行即可,然后按照输入(Input),处理(Process)和输出(Output)的步骤进行编码,最后交给计算机处理来得到计算结果。

如何从编程小白成长为大咖

编程是一门需要不断学习和实践的技能,想要从编程小白成长为大咖,需要掌握一些有效的学习方法和习惯。我们将介绍三个方面的建议,帮助你提高编程能力和水平。

做中学(Learning by doing)

做中学是指通过实际编写代码,解决问题,完成项目,来学习和巩固编程知识和技巧的方法。做中学可以让你在实践中发现自己的不足和错误,及时纠正和改进,同时也可以增强你的动手能力和创造力。
做中学的关键是要有一个明确的目标和计划,选择适合自己水平和兴趣的项目,按照一定的步骤和规范进行开发和测试,不断反思和总结自己的经验和收获。
  • 确定明确的目标:首先,你需要设定一个具体的编程目标,例如编写一个网站、,数据分析或者一个应用程序。这个目标应该有一定的挑战性,但又不应该太难以实现,以确保你的成功体验。
  • 学习基础知识:在着手实现项目之前,你需要学习相关的编程语言和框架的基础知识。这些知识可以通过自学、参加在线课程或者请教他人来获得。
  • 规划项目结构:在开始编写代码之前,你需要规划项目的整体结构和代码架构。这包括确定项目的组件、文件夹结构、命名约定等等。
  • 编写代码:接下来,你可以开始编写代码了。在编写代码的过程中,你需要尽量遵循代码规范和最佳实践,同时也要注重代码的可读性和可维护性。
  • 调试和测试:在编写完代码后,你需要对代码进行调试和测试。这可以帮助你找到代码中的错误和漏洞,并确保代码能够正常运行。
  • 反思和改进:完成项目后,你需要反思自己的编程过程和经验,总结自己的收获和不足之处。这可以帮助你在下一次项目中更好地应用所学知识,并不断提升自己的编程技能。

善用搜索引擎和文献查阅

善用搜索引擎和文献查阅是一种通过利用互联网上的各种资源,来寻找和学习编程相关的知识和信息的方法。这种方法可以帮助你扩大自己的知识面,了解最新的技术动态和趋势,找到解决问题的思路和方案,并学习优秀的代码示例和案例分析。关键在于要明确自己的需求和目的,选择适合自己的关键词和渠道,在评估和筛选搜索结果的质量和可信度时保持谨慎,同时要理解和消化所获得的内容,并将其应用到自己的编程实践中。通过这种方法,你可以不断地更新自己的知识库,提高自己的编程能力和水平。
  • 利用通配符:使用搜索引擎时,可以利用星号或问号等通配符来扩大搜索范围,找到更多的相关内容。
  • 搜索引擎关键词技巧:选择合适的关键词和词组,加入引号或减号等符号进行精确搜索,利用搜索引擎提供的筛选工具进行更加精细的搜索。
  • 使用在线文献库:如 IEEE、ACM 等,这些文献库都有自己的搜索引擎和文献收录体系,可以更加方便和快捷地查找和获取编程相关的论文和期刊。
  • 关注编程社区和博客:这些社区和博客通常会分享最新的技术动态和趋势,以及优秀的代码示例和案例分析,可以通过订阅和关注等方式获取最新的信息和资源。
  • 利用 GitHub 和 Stack Overflow 等开源社区:这些社区是程序员分享代码和解决问题的重要平台,可以通过搜索和提问等方式来获取答案和启示。
  • 学会使用英文搜索:英文搜索可以获得更多的搜索结果,同时也可以扩大自己的英文阅读能力,提升自己的国际化视野和竞争力。

学会提问和积极分享

学会提问和积极分享是指通过与其他编程爱好者或专家交流沟通来获取帮助或提供帮助,共同提高编程水平的方法。这种方法不仅可以拓展自己的人脉和视野,获得更多的反馈和建议,激发自己的灵感和动力,同时也可以帮助他人解决问题或学习新知识。因此,学会提问和积极分享是非常重要的。关键在于,要有一个积极的态度和礼貌的语气,明确自己想要问或分享什么,选择合适的平台和对象,表达清楚自己的问题或观点,并且尊重并感谢他人的回答或意见。通过这样的交流,不仅可以解决自己的问题,还可以促进编程社区的发展,让更多人受益。
  • 先自己尝试解决问题,再提出问题。在提问之前,先仔细思考和尝试解决问题,可能会自己找到答案。如果还是无法解决,再向其他人寻求帮助。
  • 表达清楚问题的背景和现象。在提问时,先描述清楚问题的背景和现象,让回答者能够理解问题的全貌和影响,更容易给出有针对性的回答。
  • 提供相关的代码和数据。在提问时,可以提供自己所写的代码和相关数据,让回答者能够更准确地判断问题所在,更快地给出回答。
  • 选择合适的平台和对象。在分享自己的知识和经验时,要选择合适的平台和对象,比如在技术论坛、社交媒体、开源社区等分享。同时,也要注意针对不同的对象和场合,采用不同的方式和语气进行表达和交流。
  • 感谢和尊重回答者的回答和意见。在得到回答和意见后,要及时回复并表示感谢,即使回答不是自己想要的答案,也要尊重回答者的劳动和贡献。同时,也可以根据自己的经验和理解,对回答和意见进行补充和改进,形成更有价值的讨论和分享。

Python 语言基础

章节导学

notion image

Python 开发环境配置

Python 作为一种广泛使用的编程语言,可以用于数据分析、机器学习、Web 开发等多个领域。在使用 Python 进行开发时,正确配置开发环境是非常重要的,这可以提高代码的效率和可读性,减少错误的出现。本节课将介绍如何在 Windows 操作系统中配置 Python 开发环境,包括 Python 解释器、包管理器、开发工具等。
对于想快速上手体验 Python,暂时不想进行本地开发环境配置的同学来说。可以直接使用基于浏览器的网页版 Python 编程环境。

在线开发环境介绍

  • 快速验证想法,无须花时间搭建

解释器安装配置

  • 解释器就是能够执行用其他计算机语言编写的程序的系统软件,它是一种翻译程序,是 Python 运行必不可少的工具。CPython 是官方版本解释器
当我们从 Python 官方网站下载并安装好 Python 3.x 后,我们就直接获得了一个官方版本的解释器:CPython。这个解释器是用 C 语言开发的,所以叫 CPython。
我们要运行以.py 为扩展名的文本文件,就需要该解释器去执行。
以 Windows 操作系统下,Python3.X 安装为例,首先我们在官网https://www.python.org/下载 Python3.7 64 位的安装程序,双击安装程序出现启动界面。记得选择自定义安装和勾选最下面一行,将 Python 加入系统路径。
在高级选项中,大家记得勾选将 Python 加入环境变量以及为所有用户安装。如果没有问题,应该会出现安装成功的界面。

Visual Studio Code 编辑器安装配置

  • IDE (Integrated Development Environment)集成开发环境,是用于提供程序开发环境的应用程序。它集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套。常见的 IDE 工具有 (visual studio code,notepad, sublime text, pycharm 等)
    • 本课程中我们选择 Visual studio code 编辑器。双击桌面图标启动后,会看到如下的开始界面。
      notion image
       
      我们会发现菜单及内容区域都是英文界面。如果想使用简体中文界面,可点击编辑器左侧的扩展图标,在微软的扩展市场下载安装中文语言包。
      该图标是一个 Vs Code 的扩展管理工具。安装成功后按照提示重启即可看到中文界面。
      notion image
       
      或者通过组合键 Ctr+Shift+P,调出控制面板。在输入框中输入"display",点击下拉框中的"配置显示语言",选择 zh-cn,按照提示重启,也可成功显示中文界面。
      下面让我们以输出"I love 中国"为例来看在 vs code 中如何新建 py 文件及保存。
      当我们点击新建文件,选择 Python 文件类型时,会看到如下的选择解释器提示框。
      notion image
       
点击该按钮,在弹出的下拉列表中,按照路径提示。选择我们上一步安装的解释器。
notion image
我们输入如下代码。print('I love 中国'),然后点击代码编辑区域右上角的运行按钮。我们会发现,结果打印在输出窗口。证明我们的解释器和编辑环境安装设置成功。
 
notion image
最后 Ctrl+S 快捷键,选择保存位置将文件保存。

开发环境测试 (import this)

Python 之禅(The Zen of Python)的内容要求程序员可以编写出漂亮而优雅,容易维护的代码。
notion image
 
随着你对 Python 的认识越来越深入,并使用它来编写越来越多的代码。
  • 编写漂亮而优雅的代码是 Python 程序员的信仰。
  • 设计出高效、漂亮的解决方案是程序员应该追求的目标。
  • Simple is better than complex.简单胜于复杂。
  • Complex is better than complicated.复杂胜于凌乱。
  • Readability counts.可读性很重要。
  • Now is better than never.做也许好过不做,但不假思索就动手还不如不做。
简单胜于复杂。如果有多种解决方案,选择简单的解决方案,可以让代码更易于维护和改进。
复杂胜于凌乱。程序开发中可能遇到复杂的问题,此时要选择最简单可行的解决方案。
可读性很重要。即使是复杂的代码,也要让它易于理解,需要编写有益的注释。
做也许好过不做。不要企图编写完美无缺的代码;先编写行之有效的代码,再决定是对其做进一步改进,还是转而去编写新代码。

Jupyter Notebook 安装配置

Jupyter Notebook 是一个交互式的开发环境,非常适合数据科学和机器学习的开发。下面是安装和使用 Jupyter Notebook 的步骤和快捷键:

安装 Jupyter Notebook

  1. 在 Windows 中打开 DOS 窗口,使用 pip 安装 Jupyter Notebook:
    1. 安装完成后,在终端输入以下命令启动 Jupyter Notebook:
      1. 浏览器将自动打开 Jupyter Notebook 页面,可以在其中创建新的 Notebook 或打开已有的 Notebook 文件。

      快捷键

      以下是 Jupyter Notebook 的一些常用快捷键:
      • Esc 进入命令模式
      • Enter 进入编辑模式
      • Shift + Enter 运行当前代码块并跳转到下一个代码块
      • Ctrl + Enter 运行当前代码块
      • B 在当前代码块下面新建一个代码块
      • A 在当前代码块上面新建一个代码块
      • X 剪切当前代码块
      • C 复制当前代码块
      • V 粘贴剪切或复制的代码块
      • D,D 删除当前代码块
      • Z 撤销上一步操作
      • Shift + Tab 显示当前函数或方法的帮助信息
      • Tab 代码补全
      Jupyter Notebook 还有很多其他功能和快捷键,可以在使用过程中逐渐了解和掌握。

      Python 输出结果含中文乱码的解决方案

      在 Visual Studio Code 中,如果在 Python 3 环境下输出的结果包含中文字符,会出现乱码问题。下面是一种简单而实用的解决方案:
      1. 打开 Visual Studio Code,点击左侧的 Extensions(扩展)按钮,在搜索框中输入“Code Runner”,安装该插件。
      1. 在 VS Code 中打开 Python 文件,按下快捷键 Ctrl + Shift + P,在搜索框中输入“settings.json”,选择“Open Settings (JSON)”(打开设置文件)。
      1. 在 settings.json 文件中添加以下内容:
        1. 这段代码指定了 Code Runner 在运行 Python 代码时指定编码格式为 utf8,以解决中文乱码问题。
      1. 保存 settings.json 文件,重新打开 Python 文件,在代码中使用 print() 输出包含中文字符的结果,此时应该不再出现乱码问题。
      需要注意的是,该解决方案仅适用于使用 Code Runner 插件运行 Python 代码的情况,如果使用其他方式运行 Python 代码仍可能出现中文乱码问题。

      良好的编码习惯

      使用必要的代码注释

      • 使用英文半角进行代码编写随着程序变得越写越长,越来越复杂,它们的可读性也越来越差。为了方便以后自己和同行能够看懂代码并进行维护,需要对解决问题的方法进行简单并有意义的注释,通常这类注释以自然语言形式表示,并且不被计算机所执行。
      • 单行注释(“#”)单行注释语句以符号“#”开始.
      • 多行注释可以用“#”开头,也可以用三对双引号(""")或三对单引号(''')来包含注释内容。

      严格使用缩进

      Python 对代码缩进有严格的要求。代码间不同的缩进层次代表了不同的逻辑从属关系。通过 tab 或 shift tab 对整体代码块进行向右或向左缩进。利用 vs code 扩展 Indent-Rainbow 来标识不同的缩进层级。

      尽量不写过长的语句

      如果语句太长,考虑换行书写,在行末用续行符“\”连接,表示同一条语句,以方便代码阅读。
      也可以通过分号“;”将多条语句写在同一行。
      • 对比其他编程语言和 Python,实现两个数的交换

      第三方代码规范检测工具

      为使 Python 代码的可读性更强、更易于维护。主要有如下成熟的代码风格规范检测工具。
      • PEP8PEP8 是 Python 代码风格规范,它规定了类似行长度、缩进、多行表达式、变量命名约定等内容。
      • PylintPylint 是一个检查违反 PEP 8 规范和常见错误的库。它在一些流行的编辑器和 IDE 中都有集成,也可以单独从命令行运行。执行 pip install pylint 安装 Pylint 。然后运行 pylint [options] path/to/dir 或者 pylint [options] path/to/module.py 就可以在命令行中使用 Pylint,它会向控制台输出代码中违反规范和出现错误的地方。
      • Flake8Flake8 是“将 PEP 8、Pyflakes(类似 Pylint)、McCabe(代码复杂性检查器)和第三方插件整合到一起,以检查 Python 代码风格和质量的一个 Python 工具”。
      • BlackBlack 在代码检查工具当中算是比较新的一个。它没有太多的自定义选项。这样的好处是你不需要去决定使用怎么样的代码风格,让 Black 来给你做决定就好。

      表达式、运算符和语句

      在学习 Python 的标准数据类型之前,首先需要掌握表达式、运算符和语句的概念,其中包括变量和赋值、表达式的书写规则、运算符及其优先级、常见语句及书写规则等。

      变量和赋值

      • 常量(constants):固定不变的量。如,圆周率 PI=3.1415,重力加速度 G=9.81
      常量,顾名思义是固定不变的量. 我们通常不能改变,也不需要改变的值,如:数字,字母,字符串等。通常用全部大写的标识符来表示常量。
      • 变量(variables),特点:“取之不尽,一冲就走”
      变量是指在程序运行过程中值会发生变化的量。在 Python 中,一切皆对象,包括数值类型、字符串类型、以及后面要讲到的列表、字典等数据类型,都统称为对象。如果希望程序记住某个对象以便以后使用,程序员只需要给这个“对象”取个名字,这个名字便是我们所要用到的变量,就像 msg 变量一样。
      Python 中的变量不需要提前声明类型。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。通过等号(=)为变量赋值,我们可以通过该变量标识符访问存储空间中的内容。
      变量的特点是“取之不尽、用之不竭”。例如,程序的第二行和第三行输出相同的内容。在第四行给变量赋值新的内容后,旧的字符串被新值取代,第五行输出新的字符串值。
      • Python 变量名区分大小写, false 和 False 表示不同的变量
      • 变量名必须以字母或下划线开头,但以下划线开头的变量在 Python 中有特殊的含义
      • 描述性强,长度短,尽量不超过 4 个单词。为了增强可读性,建议用下划线连接多个以小写字母开头的单词。(is_admin,user_id,msg_error)
      • 不能使用 Python 中已有的关键字(保留字)作为变量名,我们可以用 keyword 模块来查询 Python 的系统关键字
      • 赋值语句(assignment statements)
      大家掌握了变量的概念后,就可以通过赋值操作来为变量指定不同的内容。为了方便理解,可以将变量看作是一个容器,赋值语句就是将内容存放到这个容器中。在计算机实际执行赋值语句的过程中,会先计算等号右侧对象或表达式的值,然后在内存中找到一个位置来存储这个值,最后创建变量并指向这个内存地址。
      由于变量存储的是对象的内存地址,因此其类型也随时可以改变,主要由对象的数据类型所决定。例如,在代码的第 1 行,变量 s 的数据类型是字符串,而在第 3 行,变量 x 和 y 的数据类型是整型。
      在平行赋值中,执行顺序是先计算等号右侧的表达式,再依次将值赋给左侧。在代码的第 4 行,连续赋值语句中,变量 i 和 j 的输出结果相同,都是 1。使用 print 函数可以多对象连续输出,例如在代码的第 5 行中,所有变量的值都被输出到屏幕上。

      表达式及书写规则

      Python 中的表达式的书写规则,包括算术表达式、布尔表达式、比较表达式等。
      • 表达式(expressions)是值、变量和运算符的组合。
      • x=42
      • 数学表达式:5x ( 1 - x ),对应的 Python 表达式 5* x **2* ( 1 - x )
        • 2
      • 表达式从左往右书写
      • 乘号(*)不能省略
      • 圆括号可以嵌套,但必须成对出现,并且在英文半角状态下输入。
      值和变量自身也是表达式。Python 中表达式可由操作数和运算符构成,也可以是单个变量或常量.如果表达式的计算非常复杂,是可以有多个运算符完成。
      例如,5* x **2* ( 1 - x )这个表达式分别由值,乘法、变量、乘方、括号和减法运算符构成。

      运算符及优先级

      Python 中的各种运算符及其优先级,包括算术运算符、位运算符、赋值运算符、逻辑运算符、成员运算符、身份运算符等。
      • 算术运算符(operators)
        • Python 中代表加法、乘法等运算的特殊符号,叫做算术运算符(operator)。
      • 假设 a,b 变量的值分别是 5 和 3:
      运算符
      描述
      实例
      +
      加 - 两个对象相加
      a + b 输出结果 8
      -
      减 - 得到负数或是一个数减去另一个数
      a - b 出结果 -2
      *
      乘 - 两个数相乘或是返回一个被重复若干次的字符
      a * b 输出结果 15
      /
      除 - a 除以 b
      a / b 输出结果 1.666
      %
      取模 - 返回除法的余数
      a % b 输出结果 2
      **
      幂 - 返回 a 的 b 次幂
      a**b 为 5 的 3 次方, 输结果 125
      //
      取整除 - 返回商的整数部分
      a//b 输出结果 1
      • 复合赋值运算符 +=, -= , *= 等
        • 运算符
          描述
          实例
          =
          简单的赋值运算符
          c = a + b 将 a + b 的运算结果赋值为 c
          +=
          加法赋值运算符
          c += a 等效于 c = c + a
          -=
          减法赋值运算符
          c -= a 等效于 c = c - a
          *=
          乘法赋值运算符
          c _= a 等效于 c = c _ a
          /=
          除法赋值运算符
          c /= a 等效于 c = c / a
          %=
          取模赋值运算符
          c %= a 等效于 c = c % a
          **=
          幂赋值运算符
          c **= a 等效于 c = c ** a
          //=
          取整除赋值运算符
          c //= a 等效于 c = c // a
      • Python 运算符优先级,是指计算机运算表达式时执行的先后顺序。
      先执行具有较高优先级的运算,然后执行较低优先级的运算。优先级相同的运算符按在表达式中出现的先后顺序执行。 例如,我们常说的先执行乘除,再执行加减运算。有括号先运算括号里面的内容。
      • 括号 (Parentheses) 具有最高的优先级,并且可以强制表达式按预期的顺序计算。
      因为在括号中的表达式首先被计算,那么 2 * (3−1) 的结果是 4,(1+1)**(5−2)的结果是 8。我们也可以用括号提高表达式的可读性,如写成 (minute*100) / 60,即使这样并不改变运算的结果。
      • 指数运算 (Exponentiation) 具有次高的优先级。
      因此 1 + 2**3 的结果是 9 而不是 27,2*3**2 的结果是 18 而不是 36。
      • 乘法 (Multiplication) 和除法 (Division) 有相同的优先级,比加法 (Addition) 和减法 (Subtraction) 高,加法和减法也具有相同的优先级。
      • 比较运算符(关系运算符)
      比较运算符又称为关系运算符,用于比较两个对象的大小关系,其返回结果是一个 bool 类型值,通常用于条件控制。具体的内容如表格所示。
      • 假设 a,b 变量的值分别是 5 和 3:
      运算符
      描述
      实例
      ==
      等于 - 比较对象是否相等
      (a == b) 返回 False
      !=
      不等于 - 比较两个对象是否不相等
      (a != b) 返回 True
      >
      大于 - 返回 x 是否大于 y
      (a > b) 返回 True
      <
      小于 - 返回 x 是否小于 y
      (a < b) 返回 False
      >=
      大于等于 - 返回 x 是否大于等于 y
      (a >= b) 返回 True
      <=
      小于等于 - 返回 x 是否小于等于 y
      (a <= b) 返回 False
      • 身份运算符 is
      判断左右两个标识符是不是引用自一个对象
      is 和==虽然都是比较两者是否相等,但作用是完全不同。is 比较的是变量指向的内存地址是否相同,而==比较是对象的值是否相同。
      • 逻辑运算符(and or not )
      逻辑运算符用于判断两个 bool 型之间的关系,支持“与”(and)、“或”(or)、“非”(not)操作。输出值也是一个 bool 型。
      • 成员运算符 (in not in)
      成员运算符用于判断一个元素是否是该对象的成员。

      举一反三

      通过练习,能够巩固并加深对表达式、运算符和语句的理解和掌握,能够举一反三,快速解决问题。
      1. 半径为 r 的球体积是34πr3。其中π=3.14
        1. notion image
      半径为 7 的球体积是多少?
      1. 假设一本书的零售价是 34.95 元,但书店有 40%的折扣。第一本书的运费是 3 元,剩下每本书的运费 2 元。计算购买 60 本的总价是多少?
      1. 欧氏距离是最易于理解的一种距离计算方法,源自欧氏空间中两点间的距离公式。二维平面上两点 a(x1,y1)与 b(x2,y2)间的欧氏距离:
        1. notion image
          请计算平面 a,b 两点 (3, 2) 和 (6,10)之间的欧式距离。

      语句及书写规则

      语句是 Python 实现功能的基本单元,主要分简单语句和复合语句.
      • 简单语句 (pass 空语句 return 语句等)
      例如上面的语句中第 1 行表示赋值语句,第 2 行表示表达式语句。剩下的代码部分,主要是两个函数的定义体,我们对比来看,两者主要的区别。
      在第 3 行的函数 fun1 定义中使用了 pass 空语句,pass 语句在 Python 中表示空的语句块。常用来保持程序结构的完整性 便于后期在该位置补充完善代码。在第 12 行的在函数 fun2 定义中使用了 return 返回值语句。
      return 语句用来从函数返回值.
      • 复合语句 ( if while for)
        • 复合语句通常有多行代码组成 。包括后面要讲到的控制语句; if while for
      • 书写规则 (续行符号 \ 和 连接符号 ;)
      • 空行 将程序的不同内容分开,便于阅读
      • Python 中通常每行一条语句,建议每行不超过 80 个字符
        • 如果语句太长 可以使用续航符号\ 通常让一条完整的语句跨行显示
      • 分号(;)表示当前语句的结束,可用于同一行内连接多条语句。
        • 通常在一行中用分号可以实现多条语句 为了提高程序的可阅读性 一般不建议这么做
      • 通常用 4 个空格表示一个缩进单元
        • Python 中的复合语句对缩进有着严格的要求,在大多的编辑器中 一个 tab 制表符,表示一次 4 个空格的缩进
      notion image
      因为空格、tab 制表符和换行符是不可见字符, 我们可以通过 Python 内置函数 repr 来解决这个问题 ,它接受任意一个对象作为参数 ,然后返回一个该对象的字符串表示, 对于空白符号 ,它将用反斜杠序列表示。

      章节小结

      解释器和 Python IDE 的区别

      解释器和 Python IDE 工具的区别在于,IDE 工具只是用于方便地编辑、运行和调试代码的工具,而解释器是实际解释并运行代码的软件。配置 IDE 工具只是在调整使用工具的方式,只有对解释器的配置,才是对代码运行环境的调整。

      Python 中的编码

      在 settings.json 文件中设置以下内容,可以避免 Python 输出中文字符时出现乱码问题:
      "code-runner.executorMap": {
      "python": "set PYTHONIOENCODING=utf8 && pythonPathpythonPathfullFileName"
      },

      必要的代码注释

      在代码中添加必要的注释可以提高程序的可读性和可维护性,方便后续进行程序的修改。

      正确使用缩进

      Python 中使用 4 个空格作为一个缩进单位,不同的缩进方式代表了不同的代码从属关系。使用 Vscode 扩展 Indent-Rainbow 可以标识不同的缩进层级,有助于代码的可读性。

      运行程序前(自动)保存代码

      为了避免代码未保存就运行导致的代码丢失,可以在 Vscode 的设置中开启“在运行代码之前自动保存文件”的选项。

      善用第三方工具进行代码规范检查

      可以使用第三方工具如 Flake8、pylint 等进行代码规范检查,帮助保持代码的整洁性和可读性。

      标准数据类型

      章节导学

      本章节是 Python 编程语言的入门基础知识,主要讲解 Python 的标准数据类型,包括数字、分数、字符串、列表、元组、集合、字典等数据类型。同时还会介绍 Python 中的可迭代对象、类型转换以及数据类型的操作方法,以及一些常见错误和异常处理方法。

      标准数据类型

      Python 的一个重要特征是,对象有类型,变量无类型,我们所说的"类型"是变量所指的内存中对象的类型。Python 中有六个标准的数据类型,分为不可变类型和可变类型。不可变类型的数据一旦创建,其值就不会被修改,可变类型的值是可以允许被修改的。

      Python 标准数据类型:

      • 不可变类型(immutable):Number(数字)、String(字符串)、Tuple(元组);
      • 可变类型(mutable):List(列表)、Set(集合)、Dictionary(字典)。
      • 组合数据类型包含一组数据且作为单一管理结构的数据类型。
      组合数据类型大的分类主要有三种:序列类型、集合类型和字典类型。其中,序列类型可以按序(正序、逆序)访问,集合类型用于数据去重,字典类型是键值对的集合。

      Number(数字)

      Python 中数字数据类型的定义方法,包括整数、浮点数、复数等,并介绍常见的数字运算方法。
      • Python 支持 int、float、bool、complex(复数)。
      像大多数语言一样,数值类型的赋值和计算都是很直观的。数值类型是标量类型,也就是说这种类型的对象没有可以访问的内部结构。
      • Python 内置的数值运算函数Python 内置的数值运算函数是 Python 中常用的数学函数,包括常数 pi、e、四舍五入 round()、绝对值 abs()、幂运算 pow()、求和 sum()、最小值 min()、最大值 max() 等,这些函数可以帮助开发者在处理数值数据时更加高效和方便。

      Fraction(分数)

      分数的语法格式如图:x = Fraction(a,b),其中,a 为分子,b 为分母,Python 自动计算 x 为最简分数。
      Fraction 分数实例可以由一对整数,一个分数,或者一个字符串构建而成。它属于 fractions 模块的内置函数,需要先用 import 语句导入 fractions 模块,关于模块导入的知识点详见”模块、包和库“章节。其中 math 库中提供了丰富的内置函数,建议大家掌握常用的数学函数,如绝对值,阶乘,幂函数等。

      String(字符串)

      • Python 中的字符串用单引号 ' 或双引号 " 括起来,同时使用反斜杠 \ 转义特殊字符。
      字符串的截取的语法格式:变量[头下标:尾下标] 索引值以 0 为开始值,-1 表示字符串末尾的开始位置。
      字符串类型是一种结构化的、非标量类型,所以才会有一系列的属性和方法。
      其中,加号 + 是字符串的连接符, 星号 * 表示复制当前字符串,与之结合的数字为复制的次数。
      • 字符串对齐(左对齐,居中对齐,右对齐,填充字符)
      Python 中字符串的对齐,我们可以通过三种方法实现,其中 line 1 的方法一用到对齐函数,line 7 的方法二 使用 format 函数。 line 14 的方法三,称为格式化字符串常量,形式简洁,推荐大家熟练使用,它在形式上是以 f 或 F 修饰符开头的字符串,以花括号 {} 标明被替换的变量。

      举一反三

      1. 将数值如:123 转换成 321,1234 转换成 4321, 并输出, 有哪些实现方法?
        1. Show me the code
      1. 如果整数 b 除以 a,得出结果是没有余数的整数,就称 a 是 b 的因子,有时因子也称为因数,约数。比如 8 的因子有 1,2,4 和 8。
        1. Show me the code
      1. 我国汉代有位大将,名叫韩信。他每次集合部队,只要求部下先后按 l ~ 3、1 ~ 5、1 ~ 7 报数,然后再报告一下各队每次报数的余数,他就知道到了多少人。他的这种巧妙算法,人们称为“鬼谷算”,也叫“隔墙算”,或称为“韩信点兵”,外国人还称它为“中国余数定理”。即有一个数,用 3 除余 2,用 5 除余 3,用 7 除余 2,请问 800~1000 中这样的数有哪些?

      List(列表)

      列表是 Python 中最常用的数据类型之一,它可以存储任意类型的数据,而且可以根据下标进行索引和切片。在本章节,我们将介绍列表的常见用法,包括列表的创建、插入、更新、删除、切片等操作。
      List(列表) 是 Python 中使用最频繁的数据类型。
      列表可以完成大多数集合类的数据结构实现。列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表。
      列表是写在方括号 [] 之间、用逗号分隔开的元素列表。
      和字符串一样,列表同样可以被索引和截取,列表被截取后返回一个包含所需元素的新列表。
      列表截取的语法格式如下:
      变量[头下标:尾下标] (截取的内容不包含尾下标的内容,符合左闭右开的特点)

      Tuple(元组)

      元组(tuple)与列表类似,不同之处在于元组的元素不能修改,而列表中的元素可以修改。元组写在小括号 () 里,元素之间用逗号隔开。
      元组中的元素类型也可以不相同:

      Set(集合)

      • 集合(set)是由一个或数个形态各异的大小整体组成的,构成集合的事物或对象称作元素或是成员。
      • 集合的基本功能是进行成员关系测试和删除重复元素。
      但是上述的结果去重后,排列顺序发生了变化,可以使用有序字典来去重,同时保持原有的元素顺序。
      有序字典可以保证键是有序的,同时不会重复。
      • 可以使用花括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

      Dictionary(字典)

      字典(dictionary)是 Python 中另一个非常有用的内置数据类型。
      列表是有序的对象集合,Python3.6 以前的版本,字典是无序的对象集合,自 Python3.7 以后,字典是有序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而列表中元素是通过偏移存取。
      字典是一种映射类型,用 花括号{ } 标识,它是一个无序的 键(key) : 值(value) 的集合。
      键(key)必须使用不可变类型。如:整型,浮点型,字符串等类型。
      在同一个字典中,键(key)必须是唯一的。

      举一反三

      1. 根据旧列表,创建一个除了第一个和最后一个元素的新列表。如:t = [1, 2, 3, 4], 新列表:[2, 3]
        1. Show me the code
      1. 现有一个由整数列表构成的列表,用 Python 将所有嵌套列表中的元素相加求和。如:t = [[1, 2], [3], [4, 5, 6]],结果为:21。
        1. Show me the code
      1. 用列表(list)相关知识实现整数的逆序输出,如将 123 输出为 321。
        1. Show me the code
      1. 判断列表中的元素是否全部相同,三种方法
        1. 如:lst=['a', 'a', 'a'] ,输出的结果为 True
          Show me the code
      1. 用至少三种方法统计字符串中各字符出现的次数并以字典格式输出,如"hello world",输出:{'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1}
        1. Show me the code
          notion image

      可迭代对象及推导式

      任何可以循环遍历的对象都可称为可迭代对象,它能够一次返回其中一个成员的对象,如字符串、列表、元组、集合、字典等。通常使用 for 循环来完成成员对象的访问。
      • 列表推导式
      output_list = [表达式结果 for 元素 in 列表 if 满足的条件]
      • 字典推导式output_dict = {键:值 for (键, 值) in 可迭代对象 if 条件表达式}

      字典推导式练习题

      将上述字典 dict_using_comp 的键和值互换,生成新的字典。(三种方法)
      • 集合推导式
      • 生成器推导式它和列表推导式的用法基本一致,它使用圆括号,具有“惰性计算”的特点。它的工作方式是每次处理一个对象,而不是全部一次性处理和构造整个数据结构,这样做的优点在于处理大数据时可以节省大量的内存。
      从上面的结果可以看出,无论是运行时间还是空间占用情况,生成器推导式的表现均比列表推导式优秀(该结论与 Python 测试环境有关)。

      类型转换

      • 类型判断 type(), isinstance()
      • 类型转换
        • 有时候,我们需要对数据内置的类型进行转换,数据类型的转换,一般情况下只需要将数据类型作为函数名即可。
      Python 数据类型转换可以分为两种:
      • 隐式类型转换
      • 显式类型转换
        • 隐式类型转换由解释器自动完成, 通常由较低精度数据类型转换为较高精度数据类型,以避免数据丢失。如:将整数自动转换为浮点数。
          显式类型转换,需要使用类型函数来转换。
      Python 中基本数据类型转换的方法有:
      方法
      说明
      int(x [,base ])
      将 x 转换为一个整数
      float(x )
      将 x 转换到一个浮点数
      str(x )
      将对象 x 转换为字符串
      repr(x )
      将对象 x 转换为表达式字符串
      eval(str )
      用来计算在字符串中的有效 Python 表达式,并返回一个对象
      tuple(s )
      将序列 s 转换为一个元组
      list(s )
      将序列 s 转换为一个列表
      chr(x )
      将一个整数转换为一个字符
      ord(x )
      将一个字符转换为它的整数值

      数据类型及操作方法总结

      数据类型
      初始化
      推导式
      其他操作
      元素是否可变
      元素是否有序
      元素是否重复
      string(字符串)
      s="#"s = "hello,world"
      s = "hello,world"s=''
      s.find(element)#返回布尔值
      s.capitalize()#字符串首字母大写s.replace(old_element,new_element)#替换s.strip()#删除首尾空白
      list(列表)
      my_list=[] #list()my_list= ['Susan', 19, [85, 74]]
      my_list.append(5)#追加单个值my_list.extend([6,7,8])#添加子列表my_list.insert(index, element)#指定位置插入新值
      my_list[i]=x#按索引赋值my_list[i:j] = []#切片赋值
      del my_list[k] #按索引删除my_list.pop(k)#从列表的指定位置移除值,并将其返回。如果没有指定索引,a.pop()返回最后一个值my_list.remove(element)#删除列表中第一次出现的值
      my_list[i]my_list[i:j]
      my_list=[x for x in range(30) if x%3 == 0]#打印 0~30 的数值中能整除 3 的数
      my_list.index(element)my_list.count(element)my_list.sort()#原地排序方法my_list.reverse()my_list.copy()for i,x in enumerate(lst,start=1):print(i,x)
      tuple(元组)
      tup=() #tuple()tup= (1,)#如果只有一个值,也必需带逗号tup= ('Susan', 19, [85, 74])
      #元组不可修改单个元素tup1 = (12, 34.56)tup2 = ('abc', 'xyz')tup3 = tup1 + tup2
      del tup
      tup[i]tup[start:end :step]#切片
      tup=tuple(i for i in (1, 2, 3))
      x,y=y,x#实现两个数的交换cmp(tuple1, tuple2)max(tup),min(tup),len(tup)
      set(集合)
      s=set()s={1, 2, 3}
      s.add(x)
      a.update(b)
      s.clear()s.discard(x)s.remove(x)a.pop()#随机删除并返回集合中的一个元素
      s={x for x in range(1, 10)}
      a.union(b) #并集a.intersection(b)#交集a.difference(b)#差集
      dictionary(字典)
      my_dic={}#dict()my_dic= {'name':'zhang', 'age':18}#{key:value}my_dic= dict(country='China', code=86)
      my_dic[key] = value
      my_dic[key] = valuemy_dict.update(another_dict)
      del my_dic['Name']my_dic.pop(key) #按 key 删除元素,并返回该 key 对应的 valuemy_dic.clear()del dict
      my_dict[key]
      my_dic={x: x**2 for x in (2, 4, 6)}
      my_dic = my_dic.fromkeys(['key1','key2'])my_dic.has_key(key)my_dic.keys()my_dic.values()my_dic.items()my_dic.get(key, default)my_dic = dict(zip(keys, values))
      是(Python3.7+)
      否(键)

      案例研究

      1. Python 模拟实现微信红包游戏。
        1. 假设现有总金额 100 元,生成两个微信红包,要求红包的最小金额为 1 元,且为整数,现模拟输出两个红包的金额。
          Show me the code
                  notion image
                  notion image
                  notion image
              总结
              首先理解抽象和自动化对于计算思维的重要性,然后运用计算思维进行问题求解的关键路径主要有四步:
              1. 把实际问题抽象为数学问题,并建模将人对问题的理解用数学语言描述出来
              1. 进行映射,把数学模型中的变量等用特定的符号代替用符号一一对应数学模型中的变量和规则等
              1. 通过编程把解决问题的逻辑分析过程写成算法,把解题思路变成计算机指令,也就是算法
              1. 执行算法,进行求解,计算机根据算法,一步步完成相应指令,求出结果

              常见错误及异常处理

              • What (提示的错误信息)
              • Where(出错的位置行号)
              • Why (错误的可能原因)
                • 其实,人类从一开始,也并不知道科技该怎么发展,也是慢慢摸索总结来的。不断提出新问题,做新的假设,然后验证新的假设,总结新的规律。它是一个不断提升的过程。当你掌握了过程,以后遇到一个新的问题,你就大概知道会怎么去解决了,从什么地方入手解决。你经验就不断地积累起来了,原来做的工作对你新做的工作会有帮助,那你的成功率就会越来越高。----- 吴军《给孩子的科技史》
              在 Python 中遇到错误时,使用 3W 原则是非常重要的,包括确定错误消息是什么,错误发生的位置在哪里以及为什么会出现错误。Python 解释器会针对拼写错误、缺少括号、缩进不正确等问题提供语法错误消息。作为程序员,遇到错误是不可避免的,但至关重要的是保持冷静,利用错误消息来纠正问题。事实上,定位和纠正错误的过程是学习和成长过程的一部分。随着经验的积累,可以根据错误消息快速确定问题所在,使错误纠正过程更容易。正如吴军在《给孩子的科技史》中所述,技术的发展是一个不断学习的过程,包括确定新问题、做出新假设、验证新假设并总结新规律。通过这个过程,积累经验,提高未来的成功率。

              语法错误

              程序中包含语法错误时 解释器将显示 SyntaxError 错误信息 可以根据错误提示信息中的行号到编辑器中去定位分析。Vscode 的 Error Lens 扩展可在编码的过程中自动标识并提示具体的错误信息。可插入 Vscode 扩展的安装视频
              • 确保你没有使用 Python 的关键字作为变量名称。
              • 检查你在每个复合语句首行的末尾都加了冒号,包括 for,while,if,和 def 语句。
              • 一个没有关闭的操作符((,{以及[)使得 Python 把下一行继续看作当前语句的一部分。通常下一行会马上提示错误消息。
              • 确保每行的缩进是符合要求。Python 能够处理空格和制表符,但是如果混用则会出错。
              • 记得随时(自动)保存修改的文件
              如果修改了源文件,运行之后还是上次的错误结果,有可能是以下原因:
              • 你编辑了文件,但是忘记了在运行之前保存。有一些编程环境会在运行前自动保存,有些则不会。
              • 你更改了文件的名称,但是你仍然在运行旧名称的文件。可插入 Vscode 设置自动保存的操作视频

              运行时错误类型

              Python 程序的运行错误指的是在解释执行过程中产生的错误
              1. NameError 使用了不存在的变量名。检查下名称是否拼写正确,或者名称前后大小写是否一致。
              1. TypeError 值的使用方法不对。例如:使用非整数值作为字符串、列表或元组的索引下标。
              1. ZeroDivisionError 被零除的错误
              1. RuntimeError Maximum recursion depth exceeded 错误 无限循环

              逻辑错误

              逻辑错误也称为语义错误。一般情况下,程序可以正常运行,但执行结果与预期不符。这时候,程序编码人员需要重新思考代码的执行逻辑。建议自己用笔模拟计算机的执行,在草稿纸上验算一遍。或者通过断点跟踪、print 语句逐条跟踪过程中的输出结果。
              • 写复杂的表达式是没有问题的,前提是要可读。但是,它们很难调试。通常把复杂的表达式打散成一系列临时变量的赋值语句是一个好做法。
              • 当你找到了 bug 之后,要学会反思和复盘。这样,下次你遇到类似的情况时,就可以更快地找到 bug。

              异常处理

              程序执行过程中,如果出现错误,Python 会自动引发异常。为了使错误提示信息更友好,程序员需要通过异常处理语句显式地处理异常信息。
              具体来说,我们可以将可能引发错误的语句放在 try 块中,然后在 except 块中处理所有的错误和异常。except 块可以专门处理单一的错误或异常,或者处理一组包括在圆括号内的错误/异常。如果没有给出错误或异常的名称,except 块将处理所有的错误和异常。每个 try 块至少需要一个相关联的 except 块。这种处理方法能够有效地增加程序的健壮性,降低错误率。
              • 可以用多个 except 子句来捕获并处理不同类型的错误异常
              • try except 可以嵌套
              • 如果 try 子句中的代码没有引发异常,就执行 else 子句
              • raise 语句支持强制触发指定的异常。
              • finally 无论是否发生异常,均执行该语句块的内容。

              章节小结

              主要介绍 Python 中的标准数据类型,包括数字、分数、字符串、列表、元组、集合和字典。同时还介绍了可迭代对象和推导式的概念,以及类型转换和常见的错误及异常处理方法。在该章节中,还提供了举一反三和案例研究的练习,深入理解 Python 中的数据类型和使用方法。

              Web 爬虫

              在本章中,我们将探索使用 Python 进行网页抓取的基础知识。 Web 抓取是从网站中提取数据的过程。 Python 是一种流行的网络抓取语言,因为它有许多用于此目的的有用库。到本章结束时,您将对使用 Python 进行网页抓取有基本的了解,并能够自己从网站中提取数据。

              爬虫概述

              什么是 Web 爬虫?

              Web 爬虫是从网站中提取数据的过程。数据可以是 HTML、XML 或 JSON 等各种格式。Web 爬虫的应用包括研究、数据分析和自动化等方面。在 Python 中,使用第三方库如 BeautifulSoup 和 Requests 进行 Web 爬虫。

              Web 爬虫是否合法?

              Web 爬虫的合法性取决于其目的和方法的使用。一般来说,只要不违反网站的服务条款或版权法,Web 爬虫就是合法的。但是,如果 Web 爬虫涉及访问私人数据或侵犯某人的知识产权,那么它就是非法的。
              Web 爬虫需要遵守道德规范。一些网站可能不希望其数据被爬取,重视尊重他们的意愿是非常重要的。此外,Web 爬虫可能会对网站的资源造成压力,因此使用 Web 爬虫时要注意责任。

              可以被爬取的网页类型

              一般来说,可以被爬取的网站类型可以分为两类:
              • 静态网站,即网站的内容不会随时间变化而变化,如博客、新闻等网站。
              • 动态网站,即网站的内容会随时间变化而变化,如在线商城、社交网站等网站。
              在爬取不同类型的网站时,需要使用不同的爬虫工具和技术,比如对于静态网站,可以使用 requests 、urllib 等工具进行爬取;对于动态网站,一般需要使用 Selenium 等工具模拟浏览器行为进行爬取。

              Python 爬虫入门

              基础用法

              • 了解 HTML,CSS 和 JavaScript
              • 安装第三方库(Requests 和 BeautifulSoup )
              在进行网页内容解析时,需要了解 HTML、CSS 和 JavaScript 等前端技术的基础知识。HTML 是网页内容的结构化表示,CSS 用于控制网页的外观和样式,JavaScript 用于控制网页的交互行为。了解这些知识可以帮助我们更好地理解网页的结构和内容,从而更好地进行网页内容解析。
              在开始网络抓取之前,我们需要安装一些必需的库。我们将在本章中使用 Requests 和 BeautifulSoup 库。
              Requests 是一个常用于 HTTP 请求的 Python 库,在使用 Requests 库进行爬虫时,通常需要进行如下几个步骤:
              • 发送请求,获取网页内容;
              • 解析网页内容,提取需要的数据;
              • 存储数据或进行后续处理。
              Beautiful Soup 是另外一个 Python 库,用于从 HTML 和 XML 文件中提取数据。 它通常用于网页抓取。 它创建了一个解析树,便于在不同的节点之间轻松遍历。
              • 三种常见的 HTML 解析器
                • 解析器名称
                  特点
                  html.parser
                  Python 自带的标准库,可以进行基本的 HTML 解析。速度比较快,但是容错能力稍差。
                  lxml
                  速度较快,容错能力较好,支持 XPath 等高级解析技术,但需要安装 C 语言库和依赖库。
                  html5lib
                  支持最好的容错能力,可以处理非标准的 HTML 代码,但是解析速度相对较慢。
              因此,在选择解析器时,需要根据实际需要进行选择。如果需要解析的是基本的 HTML 代码,可以选择 html.parser 解析器;如果需要解析的是复杂的 HTML 代码,可以选择 lxml 解析器;如果需要容错能力最好的解析器,可以选择 html5lib 解析器。
              我们用 Requests 和 Beautiful Soup 爬取百度首页的标题和正文内容。
              首先,我们导入了 Requests 和 BeautifulSoup 库。我们定义了一个 URL,并使用 requests.get() 方法获取页面内容。我们将获取到的内容传递给 BeautifulSoup 对象,并使用 'html.parser' 进行解析。
              然后,我们使用 soup.title.string 获取页面标题。同样地,我们使用 soup.get_text() 获取页面正文内容。

              高级用法

              Beautiful Soup 提供了丰富的功能,可以让我们轻松地处理不同的 HTML 和 JSON 文件。这里介绍一些更高级的用法,我们可进一步了解。

              查找所有标签

              Beautiful Soup 提供了多种方法来查找标签。最基本的方法是 find_all() 方法。它可以查找所有指定的标签,并以列表的形式返回。例如,下面的代码将查找页面上的所有段落标签(<p>):
              • What(什么):这段代码使用 Python 的 requests 库和 BeautifulSoup 库从指定 URL 获取 HTML 页面,并查找所有段落元素。
              • Why(为什么):该代码可以用于网页爬虫、数据挖掘、自然语言处理等方面的应用,如获取网页中的文字内容、分析网页结构等。
              • How(如何):首先,我们定义了要访问的 URL。然后,使用 requests.get()方法发送 GET 请求并获取响应。接着,使用 BeautifulSoup 库解析响应文本,将 HTML 页面转换为可操作的 Python 对象。最后,使用 find_all()方法查找所有段落元素,并将它们输出到控制台。
              • Response(响应):该代码将返回百度网站中的所有段落元素,以列表的形式存储在 paragraphs 变量中。我们可以使用其他方法对这些元素进行操作,如提取文本内容、获取元素属性等。

              查找单个标签

              如果你只需要查找第一个匹配的标签,可以使用 find() 方法。例如,下面的代码将查找页面上的第一个段落标签:

              根据属性查找标签

              你可以根据标签的属性来查找标签。例如,下面的代码将查找页面上 class 属性为 "content" 的所有标签:

              案例分析

              爬取二十大报告正文

              • What: 这个代码段的目的是从 Web 页面中提取二十大报告正文内容,并将其保存到文本文件中。
              • Why: 我们使用 Python 库如 Requests 和 BeautifulSoup 来实现这个目的。
              • How: 我们首先发送 GET 请求以获取 Web 页面的响应。我们检查响应标头中是否存在 charset 参数,以确定编码,并将其传递给 BeautifulSoup 对象以解析响应文本。然后,我们使用 BeautifulSoup 查找 ID 为“UCAP-CONTENT”的 DIV,并获取其中的文本内容。最后,我们将文本内容保存到名为“content.txt”的文本文件中。

              Python 数据可视化

              • 数据可视化定义
              • 数据可视化作用
              • 可视化分类
              数据可视化是数据或信息的视觉呈现。它是数据分析中处理数据可视化表示的一个领域。通常以图形方式绘制数据,是向读者清晰有效地传达数据或信息的有效方式。
              “一图胜前言”,使用数据可视化,我们可以获得数据的可视化摘要。有了图片、地图和图表,人类的大脑可以更轻松地处理和理解任何给定的数据,数据可视化在小型和大型数据集的表示中都起着重要作用。
              图表可视化,通常分静态和交互式两种。

              常用的 Python 可视化库

              • Matplotlib :功能全面的可视化库,用于在 Python 中创建静态、动画和交互式可视化。
              • Seaborn:基于 matplotlib 的图形可视化库,具有灵活的 API 封装,方便绘制图表。
              • Plotly :交互式的、开源的、基于 plotly.js 的 Python 图形库。
              • PyeCharts :用于创建 Echarts 图表的 Python 类库,Echarts 是百度开源的数据可视化 JS 框架。
              Matplotlib 是一个用 Python 编写的二维图表和数据可视化包。它是 Python 社区中最受欢迎和最常用的图表包。它具有可跨多个平台使用的交互式环境。 Matplotlib 可用于各种地方,包括 Python 脚本、Python 和 IPython shell、Jupyter 笔记本、Web 应用程序服务器等。
              Seaborn 利用 matplotlib 的强大功能,只需几行代码即可创建漂亮的图表。主要区别在于 Seaborn 提供默认样式和调色板,效果更加美观和现代化。由于 Seaborn 构建在 matplotlib 之上,因此我们需要了解 matplotlib 才能修改 Seaborn 的默认设置。
              Plotly 可视化库建立在 plotly.js 之上。 plotly.js 自带 30 多种图表类型,包括科学图表、3D 图形、统计图表、SVG 地图、金融图表等。
              PyeCharts :用于创建 Echarts 图表的 Python 类库,Echarts 是百度开源的数据可视化 JS 框架。
              不同类型的图表适合不同的业务,数据可视化是为了有效的信息传递,而不仅仅是实现数据的图表化展示。

              案例研究

              词频统计的词云图

              儿童数学思维启蒙好帮手:《MaTh Puzzles and BrainTeasers》AI 101课程:助力教师从事人工智能教育