Python程序设计基础与应用课件第8章
合集下载
Python程序设计ppt课件
3
Python的版本与兼容性
说明Python 2与Python 3的主要区别,以及为 何推荐使用Python 3。
Python安装与配置
01
安装Python解释器
介绍如何在不同操作系统上安装Python解释器,包括Windows、
macOS和Linux。
02
配置Python开发环境
讲解如何配置Python的开发环境,如安装IDE或文本编辑器,并设置
属性与方法
属性是对象的特征,方法是对象的行为,通过访问对象的属性和调 用对象的方法可以操作对象。
继承与多态
继承的概念
子类可以继承父类的属性和方法,实现了代码的复用。
多态的实现
子类可以重写父类的方法,实现不同的功能,同时子类对象可以作 为父类对象使用,体现了多态的特性。
继承与多态的应用
通过继承和多态可以实现代码的灵活性和可扩展性,提高程序的可 维护性和可重用性。
关闭文件
使用`close()`方法关闭文件, 释放资源。
数据格式化
字符串格式化
使用`format()`方法或fstring进行字符串格式 化,将变量值插入到字 符串中。
数值格式化
使用`format()`方法或fstring进行数值格式化, 控制数值的显示格式 (如精度、宽度、对齐 方式等)。
日期和时间格式化
函数调用时,将实际参数 传递给形式参数,实现数 据传递和共享。
局部变量
在函数内部定义的变量, 只在函数内部有效,不会 影响函数外部的变量。
变量作用域
变量的可见性和生命周期, 分为局部变量和全局变量。
模块导入与使用
模块导入
使用`import`语句导入模块,可 以导入Python标准库中的模块
python实用教程第八章类与对象课件
• 对象:通过类定义的数据结构实例。对象包括两个数据成员(类 变量和实例变量)和方法。
• Python中的类提供了面向对象编程的所有基本功能:类的继承机 制允许多个基类,派生类可以覆盖基类中的任何方法,方法中可 以调用基类中的同名方法。
• 对象可以包含任意数量和类型的数据。
8.2 类的定义与使用
8.2.1 类的定义
8.4 继承
• 继承的语法格式如下:
• class DerivedClassName(BaseClassName):
• <statement-1>
•.
•.
• <statement-N>
• 面向对象的编程带来的主要好处之一是代码的重用,实现这种重 用的方法之一是通过继承机制。继承完全可以理解成类之间的类 型和子类型关系。
use_class这个变量称为类的具体对象。
• 再看后面两行的调用: • print(f'调用类的属性:{use_class.i}') • print(f'调用类的方法:{use_class.f()}') • 这里第一行后面use_class.i部分的作用是调用类的属性,也就是前
面所说的类变量。第二行后面use_class.f()部分的作用是调用类的 方法。
加多个基类(父类或超类),各个基类之间使用逗号分隔。 • 需要注意圆括号中父类的顺序,若父类中有相同的方法名,在子
类使用时未指定,Python会从左到右进行搜索。即若某个方法在 子类中没有定义,则子类从左到右查找各个父类中是否包含这个 方法。 • 通过类的多重继承,一个子类就可以继承多个父类,并从多个父 类中取得所有非私有方法。
• • 语法中,obj代表类对象,name代表属性。
• Python中的类提供了面向对象编程的所有基本功能:类的继承机 制允许多个基类,派生类可以覆盖基类中的任何方法,方法中可 以调用基类中的同名方法。
• 对象可以包含任意数量和类型的数据。
8.2 类的定义与使用
8.2.1 类的定义
8.4 继承
• 继承的语法格式如下:
• class DerivedClassName(BaseClassName):
• <statement-1>
•.
•.
• <statement-N>
• 面向对象的编程带来的主要好处之一是代码的重用,实现这种重 用的方法之一是通过继承机制。继承完全可以理解成类之间的类 型和子类型关系。
use_class这个变量称为类的具体对象。
• 再看后面两行的调用: • print(f'调用类的属性:{use_class.i}') • print(f'调用类的方法:{use_class.f()}') • 这里第一行后面use_class.i部分的作用是调用类的属性,也就是前
面所说的类变量。第二行后面use_class.f()部分的作用是调用类的 方法。
加多个基类(父类或超类),各个基类之间使用逗号分隔。 • 需要注意圆括号中父类的顺序,若父类中有相同的方法名,在子
类使用时未指定,Python会从左到右进行搜索。即若某个方法在 子类中没有定义,则子类从左到右查找各个父类中是否包含这个 方法。 • 通过类的多重继承,一个子类就可以继承多个父类,并从多个父 类中取得所有非私有方法。
• • 语法中,obj代表类对象,name代表属性。
《Python程序设计(课件)》
使用Git、GitHub等代码管理工具,协同开发和版本 控制,遵循规范和最佳实践。
16. Python在大数据、云计算等领域的 应用
大数据技术栈
使用Python内置和第三方大数据框架,处 理亿万级别的数据量和分布式计算。
云计算和DevOps
使用Python在云环境中进行应用开发和管 理,以及实现自动化部署和持续集成。
读写文件
使用Python内置的open函数 和文件对象,对文本和二进 制文件进行读写操作。
异常处理
try/except语句,对程序中可 能出现的异常进行处理,提 高程序的鲁棒性。
上下文管理器
with语句,处理文件、网络 连接等资源的自动释放。
9. 面向对象编程概念和实现
面向对象编程的概念
封装、继承、多态等OOP基本概念,以及面向对象 设计的原则。
1
Web爬虫
使用Python内置的和第三方爬虫库,爬取Web页面上的数据,并进行分析和可视 化。
2
数据可视化
使用Matplotlib、Seaborn等Python数据可视化库,绘制图表、热力图、散点图等 图形。
15. 软件测试和工程实践
软件测试
使用自动化测试框架和工具,提高软件质量和可维 护性。
工程实践
5. 列表、元组和字典
列表
一种可变的数据类型,存储一组有序的数 据,有丰富的切片和排序方法。
元组
一种不可变的数据类型,存储一组有序的 数据,常用于保护数据完整性。
字典
一种可变的数据类型,存储一组键值对,通过键值可以高效地查找和修改数据。
6. 函数的定义和调用
1
函数的定义
def语句,定义一个可以重复使用的代码块。
16. Python在大数据、云计算等领域的 应用
大数据技术栈
使用Python内置和第三方大数据框架,处 理亿万级别的数据量和分布式计算。
云计算和DevOps
使用Python在云环境中进行应用开发和管 理,以及实现自动化部署和持续集成。
读写文件
使用Python内置的open函数 和文件对象,对文本和二进 制文件进行读写操作。
异常处理
try/except语句,对程序中可 能出现的异常进行处理,提 高程序的鲁棒性。
上下文管理器
with语句,处理文件、网络 连接等资源的自动释放。
9. 面向对象编程概念和实现
面向对象编程的概念
封装、继承、多态等OOP基本概念,以及面向对象 设计的原则。
1
Web爬虫
使用Python内置的和第三方爬虫库,爬取Web页面上的数据,并进行分析和可视 化。
2
数据可视化
使用Matplotlib、Seaborn等Python数据可视化库,绘制图表、热力图、散点图等 图形。
15. 软件测试和工程实践
软件测试
使用自动化测试框架和工具,提高软件质量和可维 护性。
工程实践
5. 列表、元组和字典
列表
一种可变的数据类型,存储一组有序的数 据,有丰富的切片和排序方法。
元组
一种不可变的数据类型,存储一组有序的 数据,常用于保护数据完整性。
字典
一种可变的数据类型,存储一组键值对,通过键值可以高效地查找和修改数据。
6. 函数的定义和调用
1
函数的定义
def语句,定义一个可以重复使用的代码块。
8-1-Python-程序设计ppt课件
elif else except finally for from global if
Python编程基础
import in is lambda not or pass print
raise return try while with
数字类型:整数、长整数、浮点实Py数tho、n编复程数基础
整数:长度不超过计算机字长的“普通”整数,如:
3. Python 基本语句
学习内容
赋值语句 输入/输出语句 选择结构语句 循环结构语句 示例—百钱买百鸡
赋值语句
Python基本语句
格式1:<变量>= <表达式>
格式2:
同时给多个表达式赋值
<变量1>,…,<变量N>=<表达式1>,…,<表达式N>
>>> x=25
# 将数字25赋给变量x
>>> y=25
于解决问题而不是去搞明白语言本身。
速度快:Python 的底层是用 C 语言写的,很多标准
库和第三方库也都是用 C 写的,运行速度非常快。
解释性:Python语言可以直接从源代码运行程序,不
需要编译成二进制代码。
免费、开源:Python是自由/开放源码软件之一,使
用者可以自由地的拷贝、阅读源代码、做改动等。
number=number+1
百钱买百鸡
应用案例
在公元五世纪我国数学家张丘建在其《算经》一 书中提出的“百鸡问题”:鸡翁一,值钱5,鸡母一, 值钱3,鸡雏三,值钱1。 百钱买百鸡,问鸡翁、母、雏各几何?
穷举算法
应用案例
显然这是个不定方程,适用于穷举法求解。 依次取Cock值域中的一个值,然后求其他两个数,满足条 件就是一个解。
[Python程序设计基础(第2版)][李东方 (8)[47页]
【例8-5】 用grid()方法排列标签,效果如图8-6所示。设想有一个3×4 的表格,起始行、列序号均为0。将标签lbred置于第2列第0行;将标签 lbgreen置于第0列第1行;将标签lbblue置于第1列起跨2列第2行,占 20像素宽
import tkinter root = () lbred = bel(root, text="Red",
# 创建一个320×240的窗体
8.1.2 tkinter常用控件
【例8-2】 标签及其常见属性示例
import tkinter root=() lb=bel(root,text='我是一个标签',\
bg='#d3fbfb',\ fg='red',\ font=('华文新魏',32),\ width=20,\ height=2,\ relief=tkinter.SUNKEN) lb.pack() root.mainloop()
8.1.3 控件布局 控件的布局通常有pack()、grid()和place()三种方法。 1.pack()方法 方法pack()是一种简单的布局方法,如果用不加参数的默认方式,将按布 局语句的先后,以最小占用空间的方式自上而下地排列控件实例,并且保 持控件本身的最小尺寸。 【例8-3】 用pack()方法不加参数排列标签。为看清楚各控件实例所占用 的空间大小,文本使用了不同长度的中英文,并设置 relief=tkinter.GROOVE的凹陷边缘属性
2.grid()方法 方法grid()是基于网格的布局。先虚拟一个二维表格,再在该表格中布局 控件实例。由于在虚拟表格的单元格中所布局的控件实例大小不一,单 元格也没有固定或均一的大小,因此其仅用于布局的定位。grid()方法与 pack()方法不能混合使用。 方法grid()常用的布局参数如下。
Python程序设计课件汇总全书电子教案完整版课件(最新)
1.2.2 计算机软件发展
1. 微机上的典型操作系统 Windows操作系统的发展
1.2.2 计算机软件发展
2.语言处理系统
(1)汇编程序 汇编程序(assembler)是将汇编语言编写的源程序翻译加工成机器语言表示的目标程序的一种软件。汇 编程序一般还提供查错、修改等功能,并对源程序中出现的伪指令等作相应的处理。 (2)解释程序 解释程序(Interpreter)将高级程序设计语言编写的源程序按动态的运行顺序逐句进行翻译并执行,即每 翻译一句就产生一系列完成该语句功能的机器指令并立即执行这一系列机器指令,如此进行,直至源程序 运行结束。在这过程中,若出现错误,则系统会显示出错信息,待修正后才能继续下去,解释程序的这种 工作方式,便于实现人机会话。 (3)编译程序 编译程序(compiler)是能将用高级程序设计语言编写的源程序翻译成用汇编语言或机器语言表示的目 标程序。 编译程序把源程序翻译成目标程序一般经过词法分析、语法分析、中间代码生成、代码优化和目标代码 生成五个阶段。
数据库系统是一门综合的软件技术,它研究如何有效地组织数据和方便地处理数 据。数据库系统是一个记载和维护数据信息的系统,它由数据、硬件、软件和用户四 部分构成。
数据是数据库系统的重要资源。在系统中,一般把它组织成一些数据库存储,它 具有冗余小、可共享等特点。所谓数据库,可理解成按一定的方式组织起来的操作数 据的集合。
硬件是数据库系统的物质基础,包括存储系统中数据的存储设备以及有关的控制 设备,如硬盘、光盘等。
软件是数据库管理系统。它是用户和物理数据库之间的接口,能把数据库的物理 细节屏蔽起来,向用户提供一个使用方便灵活的友善的工作界面。
数据库管理系统是一组软件的集合,用来定义数据库,帮助和控制用户为增加、 删除、修改和检索数据时对数据库的访问和使用,提供数据独立性、完整性和安全性 的保障。
Python程序设计教程第8章
8.3 队列
队列是一种经典的数据结构,它也不是Python的 内置数据结构,而是属于扩展数据结构。队列相 当于两边都开口的容器。但是一边只能进行删除 操作,而不能进行插入操作;另一边只能进行插 入操作,而不能进行删除操作。进行插入操作的 这一端叫做队尾,进行删除操作的这一端叫做队 首。所以,队列中的数据是从队尾进队首出的。 队列的数据元素又称为队列元素。在队列中插入 一个队列元素称为入队,从队列中删除一个队列 元素成为出队。
tree_node.lchild = node return elif tree_node.rchild == None: #如果当前节 点的右孩子为空,则将新节点作为当前节点的右孩子
tree_node.rchild = node return else: queue.append(tree_node.lchild) queue.append(tree_node.rchild)
初始化时的队列
将数据A执行入队操作
将数据B执行入队操作
再将数据C执行进栈操作
再将数据C执行进栈操作
将数据A执行出队操作
8.3.2 利用Python列表实现队列的数据结 构
本节介绍一个Python自定义类Queue,它的功能 是利用Python列表实现队列的数据结构。
1. 构造函数
#coding:utf8 class Queue(object) :
初始化时的栈
将数据A执行进栈操作
再将数据B执行进栈操作
8.2.2 利用Python列表实现栈的数据结构
1. 构造函数 首先,在构造函数中定义一个列表items用 于实现栈的容器,代码如下: #coding:utf8 class Stack:
"""模拟栈""" def __init__(self):
大数据的Python基础课件第8章 函数设计与应用
#关键参数
14
8.2.4 可变长度参数
>>> def demo(a, b, c, *p): print(a, b, c) print(p)
>>> demo(1, 2, 3, 4, 5, 6) 123 (4, 5, 6) >>> demo(1, 2, 3, 4, 5, 6, 7, 8) 123 (4, 5, 6, 7, 8)
15
8.2.4 可变长度参数
>>> def demo(**p): for item in p.items(): print(item)
>>> demo(x=1, y=2, z=3) ('y', 2) ('x', 1) ('z', 3)
16
8.3 变量作用域
>>> def demo(): global x x=3 y =4 print(x, y)
20
8.4 lambda表达式
>>> from functools import reduce >>> reduce(lambda x,y:x*y, data[0]) #第一行所有数字相乘 0 >>> reduce(lambda x,y:x*y, data[1]) #第二行所有数字相乘 171018396981432000 >>> list(map(lambda row:row[0], data)) #获取每行第一个元素 [72, 28, 32, 22, 90] >>> list(map(lambda row:row[data.index(row)], data))
《Python基础课件》8-函数设计及模块应用
默认参数
默认参数是在函数定义中给定的参数初始值,如果不提供对应的实际值,函数将使用默认值。默认参数使得函 数调用更加简洁,但需谨慎使用。
可变参数
可变参数允许函数接收不定数量的参数。在函数定义中以 * 开头的参数将会 被收集成元组,以 ** 开头的参数将会被收集成字典。
匿名函数
匿名函数是一种没有函数名的函数,用于简化代码和增加代码的可读性。匿 名函数通常用于函数作为参数的场景。
通过定义函数,我们可以将一系列任务封装起来,起一个有描述性的函数名,并在需要时调用该函数,使得代 码结构更加清晰和可读。
函数参数
函数参数是在函数定义中给定的变量,用于接收外部传入的数据。函数可以 有零个或多个参数,参数在调用函数时传入实际值。
位置参数和关键字参数
位置参数是按照函数定义中的参数顺序进行传递的,而关键字参数则通过参 数名进行传递。关键字参数可以跳过位置,使得函数调用更加灵活。
Hale Waihona Puke Python基础课件:函数设 计及模块应用
在这节课中,我们将学习Python函数的设计和模块应用。函数是代码的重用 单位,模块是组织代码的方式。让我们开始吧!
什么是函数
函数是一段可重复使用的代码块,用来执行特定的任务。它可以接收输入参 数并返回输出结果,使代码更加模块化和易于维护。
函数的定义和调用
Python培训ppt课件
使用pip安装 BeautifulSoup库,然后在 代码中导入bs4模块。
使用BeautifulSoup对象解 析HTML文档,并生成一个 树形结构。
通过选择器或方法查找 HTML元素,并提取所需数 据。
对提取的数据进行清洗、 转换或进一步处理。
Scrapy框架实现高级爬虫
Scrapy框架介绍
安装与配置
Python中的字符串是不 可变序列,可以使用单 引号、双引号或三引号 表示。字符串支持索引 、切片、连接等操作, 可以使用format方法进 行格式化输出。
Python中的列表是可变 序列,可以包含任意类 型的元素。列表支持添 加、删除、修改等操作 ,可以使用for循环遍历 列表中的元素。
Python中的元组是不可 变序列,与列表类似但 不允许修改。元组通常 用于表示一组相关的数 据,可以作为字典的键 或函数的返回值。
Python中可以使用def关键字定义函数,使 用import关键字导入模块。函数和模块可 以提高代码的复用性和可维护性。
Python数据类型
数字类型
字符串类型
列表类型
元组类型
字典类型
Python支持int(整型) 、float(浮点型)、 complex(复数)等数 字类型,可以进行数学 运算和逻辑比较。
高级绘图功能
Matplotlib是Python中用于绘 制静态、动态和交互式图形的 库,提供了丰富的绘图API和 图形样式设置功能。
介绍Matplotlib中的基本绘图 元素和绘图流程,包括画布、 坐标轴、图形对象等。
详细讲解如何设置图形的颜色 、线型、标记样式等属性,以 及如何使用子图和多图布局。
Keras框架实现深度学习模型
TensorFlow框 架概述
《Python基础课件》-Python课件,Python程序设计课件
介绍其他流行的Python机器学习和深度学习框架,例如Scikit-Learn和 TensorFlow等。
自然语言处理和图像处理
自然语言处理
• Python中的自然语言处理库:NLTK • 中文自然语言处理:HanLP • 自然语言处理的应用场景:分词、词性标注、
命名实体识别、文本分类等。
图像处理
inter库
2
使用Python自带的Tkinter库进行GUI开
发,包括窗口和组件的创建、布局、事
件处理等。
3
Python GUI编程介绍
了解GUI编程的基本概念和工具,以及为 什么要使用Python进行GUI开发。
PyQt和wxPython其他GUI框架
《Python基础课件》—— Python课件,Python程序 设计课件
欢迎来到《Python基础课件》!在这里我们将深入探讨Python的语言特性和 应用领域,帮助您成为Python编程大师!
Python基础概念和语法
1
Python数据类型
2
Python中的常见数据类型有哪些,包括
字符串、数字、列表、元组、字典等。
网络安全和信息安全的应用
介绍Python在网络安全和信息安全领域 的应用场景,包括加密通信、密码学分 析、数据泄露检测等。
Python的应用和实践
Python的应用领域
Python项目开发实践
介绍Python在人工智能、数据分 析、Web开发等领域的广泛应用。
如何以Python为基础开发各种项 目,包括Web应用、机器学习应 用、图像处理应用等。
Python数据分析
介绍Python相关的数据分析 库,包括Pandas、Numpy和 Matplotlib等。
python课件(最新整理版)精选全文
将x转换为一个长整数
float(x)
将x转换到一个浮点数
complex(real [,imag])
创建一个复数
str(x)
将对象 x 转换为字符串
repr(x)
将对象 x 转换为表达式字符串
eval(str)
用来计算在字符串中的有效Python表达式,并返回一个对象
tuple(s)
将序列 s 转换为一个元组
2021/1/5
5
PYTHON的安装
Python已经被移植在许多平台上(经过改动使它能够工作在不同平台上)。您需要下载适用于您使用平台的二进制代码,然后安装Python。Unix & Linux 平台安装 Python:在 bash shell (Linux): 输入 export PATH="$PATH:/usr/local/bin/python" Window 平台安装 Python;MAC 平台安装 Python;最近的Macs系统都自带有Python环境,你也可以在链接 /download/ 上下载最新版安装。
PYTHON基础知识培训
2021/1/5
1
培训内容python概述python基础语法Python数据类型条件和循环函数模块面向对象编程文件相关
2021/1/5
2
什么是PYTHON
Python是一种开源的 、解析性的,面向对象的编程语言。Python使用一种优雅的语法,可读性强 Python支持类和多层继承等的面向对象编程技术。 Python可运行在多种计算机平台和操作系统中,如unix,windows,MacOS,ubuntu,OS/2等等
2021/1/5
14
python 中多行注释使用三个单引号(''')或三个双引号(""")。
float(x)
将x转换到一个浮点数
complex(real [,imag])
创建一个复数
str(x)
将对象 x 转换为字符串
repr(x)
将对象 x 转换为表达式字符串
eval(str)
用来计算在字符串中的有效Python表达式,并返回一个对象
tuple(s)
将序列 s 转换为一个元组
2021/1/5
5
PYTHON的安装
Python已经被移植在许多平台上(经过改动使它能够工作在不同平台上)。您需要下载适用于您使用平台的二进制代码,然后安装Python。Unix & Linux 平台安装 Python:在 bash shell (Linux): 输入 export PATH="$PATH:/usr/local/bin/python" Window 平台安装 Python;MAC 平台安装 Python;最近的Macs系统都自带有Python环境,你也可以在链接 /download/ 上下载最新版安装。
PYTHON基础知识培训
2021/1/5
1
培训内容python概述python基础语法Python数据类型条件和循环函数模块面向对象编程文件相关
2021/1/5
2
什么是PYTHON
Python是一种开源的 、解析性的,面向对象的编程语言。Python使用一种优雅的语法,可读性强 Python支持类和多层继承等的面向对象编程技术。 Python可运行在多种计算机平台和操作系统中,如unix,windows,MacOS,ubuntu,OS/2等等
2021/1/5
14
python 中多行注释使用三个单引号(''')或三个双引号(""")。
第8章PythonPytho程序设计基础教程面向对象编程ppt课件
16
8.2. 类的继承
面向对象的编程带来的主要好处之一是代 码的重用,实现这种重用的方法之一是通 过继承机制。一个类继承另一个类时,它 将自动获得另一个类的所有属性和方法; 原有的类称为父类,而新类称为子类。子 类继承了其父类的所有属性和方法,同时 还可以定义自己的属性和方法。继承完全 可以理解成类之间的类型和子类型关系。
2. 定义了eat()方法,该方法的参数是self和food:self表示当前 调用eat()的对象,food是一个数字类型参数,表示吃进去的食 物重量,通过self.weight=self.weight+food使得调用eat() 方法的Person对象体重增加,如p1.eat(2)表示Person对象p1 的体重增加2,同时显示信息。
5. 代Байду номын сангаас块4创建了两个不同的Person对象,分别是p1 和p2,分别调用他们的eat()、run()、say()方法。
10
对象属性的默认值设置
可以为属性在__init__()方法中设置默认值,代 码如下:
# 例 8 3在类的定义中加入初始化代码 def __init__(self, name, gender='男', weight=70):
9
3. 定义了run()方法,该方法只有一个参数self,通过s elf.weight=self.weight-1使得调用run()的对象体 重减1,如p1.run(),表示Person对象p1通过跑步 锻炼体重降低了1,同时显示信息。
4. 定义了say()方法,该方法只有一个参数self,通过p rint('My name is %s' % ())语句自我 介绍,如p2.say(),输出“王昭君”,自我介绍。
8.2. 类的继承
面向对象的编程带来的主要好处之一是代 码的重用,实现这种重用的方法之一是通 过继承机制。一个类继承另一个类时,它 将自动获得另一个类的所有属性和方法; 原有的类称为父类,而新类称为子类。子 类继承了其父类的所有属性和方法,同时 还可以定义自己的属性和方法。继承完全 可以理解成类之间的类型和子类型关系。
2. 定义了eat()方法,该方法的参数是self和food:self表示当前 调用eat()的对象,food是一个数字类型参数,表示吃进去的食 物重量,通过self.weight=self.weight+food使得调用eat() 方法的Person对象体重增加,如p1.eat(2)表示Person对象p1 的体重增加2,同时显示信息。
5. 代Байду номын сангаас块4创建了两个不同的Person对象,分别是p1 和p2,分别调用他们的eat()、run()、say()方法。
10
对象属性的默认值设置
可以为属性在__init__()方法中设置默认值,代 码如下:
# 例 8 3在类的定义中加入初始化代码 def __init__(self, name, gender='男', weight=70):
9
3. 定义了run()方法,该方法只有一个参数self,通过s elf.weight=self.weight-1使得调用run()的对象体 重减1,如p1.run(),表示Person对象p1通过跑步 锻炼体重降低了1,同时显示信息。
4. 定义了say()方法,该方法只有一个参数self,通过p rint('My name is %s' % ())语句自我 介绍,如p2.say(),输出“王昭君”,自我介绍。
Python编程基础与应用教学课件8
8.2.3 NumPy序列数组
NumPy的arange函数与Python的range函数功能相似, 参数依次为:开始值、结束值和步长。比range函数增 强的功能是,步长可以为浮点数。
23
第8章 数据分析与可视化
8.2 NumPy
8.2.3 NumPy序列数组
另外,还可以使用linespace函数创建等差序列数 组,其参数依次为:开始值、结束值和元素数量。
35
第8章 数据分析与可视化
8.3 Pandas
8.3.2 二维数组DataFrame
创建DataFrame 二维数组DataFrame可以使用各种输入创建,如列表、字典、 一维数组Series、NumPy ndarray或者另一个二维数组 DataFrame。下面示例创建一个学生信息DataFrame。
8.2 NumPy
8.2.6 NumPy数组复制
以上为深复制。 可以看出,对 复制后数组的 修改,不影响 复制的源数组。
29
第8章 数据分析与可视化
8.2 NumPy
8.2.7 NumPy矩阵
NumPy的矩阵对 象与数组对象 相似,主要不 同在于,矩阵 对象的计算遵 循矩阵的数学 运算规律,支 持矩阵的乘、 转置和求逆等。 矩阵用matrix() 函数创建
算。 • 线性代数、随机数生成以及傅里叶变换等功能。 • 可以方便地传送数据到其它语言(如C\C++)编写的外部库,也
便于外部库以NumPy数组形式返回数据。
13
第8章 数据分析与可视化
8.2 NumPy
8.2.1 创建NumPy数组
使用NumPy数组,需要导入NumPy包。 方法如下:
首先导入NumPy包,并指定导入包 的别名为np(后面示例中可能不再 包含此句,需要时请读者自行加 上 ) 。 NumPy 用 array() 函 数 创 建 ndarray 数 组 , 上 面 示 例 创 建 一 个 一维数组,并直接输出。
NumPy的arange函数与Python的range函数功能相似, 参数依次为:开始值、结束值和步长。比range函数增 强的功能是,步长可以为浮点数。
23
第8章 数据分析与可视化
8.2 NumPy
8.2.3 NumPy序列数组
另外,还可以使用linespace函数创建等差序列数 组,其参数依次为:开始值、结束值和元素数量。
35
第8章 数据分析与可视化
8.3 Pandas
8.3.2 二维数组DataFrame
创建DataFrame 二维数组DataFrame可以使用各种输入创建,如列表、字典、 一维数组Series、NumPy ndarray或者另一个二维数组 DataFrame。下面示例创建一个学生信息DataFrame。
8.2 NumPy
8.2.6 NumPy数组复制
以上为深复制。 可以看出,对 复制后数组的 修改,不影响 复制的源数组。
29
第8章 数据分析与可视化
8.2 NumPy
8.2.7 NumPy矩阵
NumPy的矩阵对 象与数组对象 相似,主要不 同在于,矩阵 对象的计算遵 循矩阵的数学 运算规律,支 持矩阵的乘、 转置和求逆等。 矩阵用matrix() 函数创建
算。 • 线性代数、随机数生成以及傅里叶变换等功能。 • 可以方便地传送数据到其它语言(如C\C++)编写的外部库,也
便于外部库以NumPy数组形式返回数据。
13
第8章 数据分析与可视化
8.2 NumPy
8.2.1 创建NumPy数组
使用NumPy数组,需要导入NumPy包。 方法如下:
首先导入NumPy包,并指定导入包 的别名为np(后面示例中可能不再 包含此句,需要时请读者自行加 上 ) 。 NumPy 用 array() 函 数 创 建 ndarray 数 组 , 上 面 示 例 创 建 一 个 一维数组,并直接输出。
Python程序设计基础课件第8章
无连接的UDP时序图
8.2 TCP 编程
8.2.1 TCP客户端编程
当用户使用浏览器访问网页时,用户的计算机就是客户端,用户的浏览器 向网页的服务器主动发起连接,如果网页所在的服务器响应了连接要求, 就建立了一个TCP连接。以后通信的内rt socket
header,html=data.split(b'\r\n\r\n',1)
#将网页中HTTP头部和网页内容分离
print(header.decode('utf-8'))
#将网页中HTTP39;) as f:
8.1 网络编程基础
2.创建UDP的socket: import socket s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
UDP是无连接的,先启动 哪一端都不会报错,也不需 要监听,只需要用bind()绑定 对方的IP地址和端口号(在图 中用虚线表示),就可以直接 发送数据。客户端仅调用 sendTo()就给服务器发送数据。 服务器也只是调用 reciveFrom()等待和接收客户 端发来的数据,调用sendTo() 给客户端发送应答。
s.connect(('127.0.0.1', 10022))
#建立连接
while True:
#发送多次数据
data = input('请输入要发送的数据:') #发送数据
if data == 'quit':
#如果为'quit',则退出
break
s.send(data.encode())
#发送编码后的数据
importsockessocketsocketsocketafinetsocketsockstream服务器和客户端建立通讯过程需要服务器端先调用socket建立一个套接字然后利用bind与本机指定的端口绑定调用listen对端口进行监听处于准备接收连接状态如果有个客户端初始化一个socket可以调用connect连接服务器服务器调用accept接收用户连接客户端与服务器的连接就建立了
8.2 TCP 编程
8.2.1 TCP客户端编程
当用户使用浏览器访问网页时,用户的计算机就是客户端,用户的浏览器 向网页的服务器主动发起连接,如果网页所在的服务器响应了连接要求, 就建立了一个TCP连接。以后通信的内rt socket
header,html=data.split(b'\r\n\r\n',1)
#将网页中HTTP头部和网页内容分离
print(header.decode('utf-8'))
#将网页中HTTP39;) as f:
8.1 网络编程基础
2.创建UDP的socket: import socket s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
UDP是无连接的,先启动 哪一端都不会报错,也不需 要监听,只需要用bind()绑定 对方的IP地址和端口号(在图 中用虚线表示),就可以直接 发送数据。客户端仅调用 sendTo()就给服务器发送数据。 服务器也只是调用 reciveFrom()等待和接收客户 端发来的数据,调用sendTo() 给客户端发送应答。
s.connect(('127.0.0.1', 10022))
#建立连接
while True:
#发送多次数据
data = input('请输入要发送的数据:') #发送数据
if data == 'quit':
#如果为'quit',则退出
break
s.send(data.encode())
#发送编码后的数据
importsockessocketsocketsocketafinetsocketsockstream服务器和客户端建立通讯过程需要服务器端先调用socket建立一个套接字然后利用bind与本机指定的端口绑定调用listen对端口进行监听处于准备接收连接状态如果有个客户端初始化一个socket可以调用connect连接服务器服务器调用accept接收用户连接客户端与服务器的连接就建立了
Python基础8ppt
字体和颜色。简单的静态文本控件可以包含多行 文本,但是你不能处理多种字体或样式。处理多 种字体或样式,要使用更精细的文本控件,如 wx.html.HTMLWindow。为了在静态文本控件中 显示多行文本,我们要包括其中有换行符的字符 串,并使控件的大小足够显示所有的文本。 wx.StaticText窗口不会接受或响应鼠标事件。
使用基本的控件
wxPython工具包提供了多种不同的窗口部 件,包括了本章所提到的基本控件。我们 涉及静态文本、可编辑的文本、按钮、微 调、滑块、复选框、单选按钮、选择器、 列表框、组合框和标尺。
静态文本
在wxPython中,使用类wx.StaticText来完成。 在wx.StaticText中,你能够改变文本的对齐方式、
输入文本
import wx
class TextFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -
1, ’Text Entry Example’, size=(300, 100))
panel = wx.Panel(self, -1)
basicLabel = wx.StaticText(panel, -
1, ”Basic Control:”)
输入文本
basicText = wx.TextCtrl(panel, 1, ”I’ve entered some text!”, size=(175, -1))
basicText.SetInsertionPoint(0) pwdLabel = wx.StaticText(panel, -
app = wx.PySimpleApp()
frame = StaticTextFrame()
使用基本的控件
wxPython工具包提供了多种不同的窗口部 件,包括了本章所提到的基本控件。我们 涉及静态文本、可编辑的文本、按钮、微 调、滑块、复选框、单选按钮、选择器、 列表框、组合框和标尺。
静态文本
在wxPython中,使用类wx.StaticText来完成。 在wx.StaticText中,你能够改变文本的对齐方式、
输入文本
import wx
class TextFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -
1, ’Text Entry Example’, size=(300, 100))
panel = wx.Panel(self, -1)
basicLabel = wx.StaticText(panel, -
1, ”Basic Control:”)
输入文本
basicText = wx.TextCtrl(panel, 1, ”I’ve entered some text!”, size=(175, -1))
basicText.SetInsertionPoint(0) pwdLabel = wx.StaticText(panel, -
app = wx.PySimpleApp()
frame = StaticTextFrame()
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 同样的道理,正则表达式'^\d{18}|\d{15}$'也只负责检查字符串是否为18位或 15位数字,并不保证一定是合法的身份证号。
12
8.2 直接使用正则表达式模块re处理字符串
• Python标准库re模块提供了正则表达式操作所需要的功能。
方法
功能说明
findall(pattern, string[, flags]) 返回包含字符串中所有与给定模式匹配的项的列表
10
8.1.3 正则表达式集锦
✓ '^(\-)?\d+(\.\d{1,2})?$':检查给定字符串是否为最多带有2位小数的正数或负数。 ✓ '[\u4e00-\u9fa5]':匹配给定字符串中所有汉字。 ✓ '^\d{18}|\d{15}$':检查给定字符串是否为合法身份证格式。 ✓ '\d{4}-\d{1,2}-\d{1,2}':匹配指定格式的日期,例如2016-1-31。 ✓ '^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[,._]).{8,}$':检查给定字符串是否为强密码,必须同时
例如,“(.)\1”匹配两个连续的相同字符
\f 换页符匹配
\n 换行符匹配
4
8.1.1 正则表达式基本语法
元字符
功能说明
\r 匹配一个回车符 \b 匹配单词头或单词尾
\B 与\b含义相反 \d 匹配任何数字,相当于[0-9] \D 与\d含义相反,等效于[^0-9] \s 匹配任何空白字符,包括空格、制表符、换页符,与 [ \f\n\r\t\v] 等效
5
8.1.1 正则表达式基本语法
• 如果以“\”开头的元字符与转义字符相同,则需要使用“\\”,或者使用 原始字符串。
• 在字符串前加上字符r或R之后表示原始字符串,字符串中任意字符都不再进 行转义。原始字符串可以减少用户的输入,主要用于正则表达式和文件路径 字符串的情况,但如果字符串以一个斜线“\”结束的话,则需要多写一个 斜线,即以“\\”结束。
{n,}、{n,m})之后时,匹配模式是“非贪心的”。“非贪心的”模式匹配搜索到的、
尽可能短的字符串,而默认的“贪心的”模式匹配搜索到的、尽可能长的字符串。例
如,在字符串“oooo”中,“o+?”只匹配单个“o”,而“o+”匹配所有“o”
\ 表示位于\之后的为转义字符
\num 此处的num是一个正整数,表示子模式编号。
match(pattern, string[, flags]) 从字符串的开始处匹配模式,返回match对象或None
search(pattern, string[, flags]) 在整个字符串中寻找模式,返回match对象或None
split(pattern, string[, maxsplit=0]) 根据模式匹配项分隔字符串
字母、数字、“_”、“.”的字符串。 ✓ '^(\w){6,20}$':匹配长度为6-20的字符串,可以包含字母、数字、下划线。 ✓ '^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$':检查给定字符串是否为合法IP地址。 ✓ '^(13[4-9]\d{8})|(15[01289]\d{8})$':检查给定字符串是否为移动手机号码。 ✓ '^[a-zA-Z]+$':检查给定字符串是否只包含英文字母大小写。 ✓ '^\w+@(\w+\.)+\w+$':检查给定字符串是否为合法电子邮件地址。 ✓ r'(\w)(?!.*\1)':查找字符串中每个字符的最后一次出现。 ✓ r'(\w)(?=.*\1)':查找字符串中所有重复出现的字符。
9
8.1.3 正则表达式集锦
✓ '(a|b)*c':匹配多个(包含0个)a或b,后面紧跟一个字母c。 ✓ 'ab{1,}':等价于'ab+',匹配以字母a开头后面带1个至多个字母b的字符串。 ✓ '^[a-zA-Z]{1}([a-zA-Z0-9._]){4,19}$':匹配长度为5-20的字符串,表达式扩展语法
• 正则表达式使用圆括号“()”表示一个子模式,圆括号内的内容作为一个整 体对待,例如'(red)+'可以匹配'redred'、'redredred'等一个或多个重复'red'的 情况。
• 使用子模式扩展语法可以实现更加复杂的字符串处理功能。
7
8.1.2 正则表达式扩展语法
#处理连续的重复单词
"It's a very good idea"
>>> re.sub(r'((\w+) )\1', r'\2', s)
"It's a very goodidea"
>>> re.sub('a', lambda x:x.group(0).upper(), 'aaa abc abde')
用于正则表达式之后,表示如果=后的内容在字符串中出现则匹配,但不 返回=之后的内容
用于正则表达式之前,表示如果<!后的内容在字符串中不出现则匹配,但 不返回<!之后的内容
用于正则表达式之后,表示如果!后的内容在字符串中不出现则匹配,但 不返回!之后的内容
8
8.1.3 正则表达式集锦
✓ 最简单的正则表达式是普通字符串,可以匹配自身 ✓ '[pjc]ython'可以匹配'python'、'jython'、'cython' ✓ '[a-zA-Z0-9]'可以匹配一个任意大小写字母或数字 ✓ '[^abc]'可以一个匹配任意除'a'、'b'、'c'之外的字符 ✓ 'python|perl'或'p(ython|erl)'都可以匹配'python'或'perl' ✓ 子模式后面加上问号表示可选。r'(http://)?(www\.)?python\.org'只能匹配
>>> import re
#导入re模块
>>> text = 'alpha. beta....gamma delta' #测试用的字符串
>>> re.split('[\. ]+', text)
#使用指定字符作为分隔符进行分隔
['alpha', 'beta', 'gamma', 'delta']
>>> re.split('[\. ]+', text, maxsplit=2) #最多分隔2次
• 正则表达式在文本编辑与处理、网页爬虫之类的场合中有重要应用。
2
8.1 正则表达式语法
• 正则表达式由元字符及其不同组合来构成,通过巧妙地构造正则表达式可以 匹配任意字符串,并完成查找、替换、分隔等复杂的字符串处理任务。
3
8.1.1 正则表达式基本语法
元字符
功能说明
. 匹配除换行符以外的任意单个字符
#repl为可调用对象
'AAA Abc Abde'
16
8.2 直接使用正则表达式模块re处理字符串
>>> re.sub('[a-z]', lambda x:x.group(0).upper(), 'aaa abc abde')
* 匹配位于*之前的字符或子模式的0次或多次出现
+ 匹配位于+之前的字符或子模式的1次或多次出现
- 在[]之内用来表示范围
| 匹配位于|之前或之后的字符
^ 匹配行首,匹配以^后面的字符开头的字符串
$ 匹配行尾,匹配以$之前的字符结束的字符串
? 匹配位于?之前的0个或1个字符。当此字符紧随任何其他限定符(*、+、?、{n}、
['alpha', 'beta', 'gamma delta']
>>> re.split('[\. ]+', text, maxsplit=1) #最多分隔1次
['alpha', 'beta....gamma delta']
>>> pat = '[a-zA-Z]+'
>>> re.findall(pat, text)
包含英语字母大写字母、英文小写字母、数字或特殊符号(如英文逗号、英文句号、下划 线),并且长度必须至少8位。 ✓ "(?!.*[\'\"\/;=%?]).+":如果给定字符串中包含’、”、/、;、=、%、?则匹配失败。 ✓ '(.)\\1+':匹配任意字符的一次或多次重复出现。 ✓ '((?P<f>\b\w+\b)\s+(?P=f))':匹配连续出现两次的单词。 ✓ '((?P<f>.)(?P=f)(?P<g>.)(?P=g))':匹配AABB形式的成语或字母组合。
11
8.1.3 正则表达式集锦
• 使用时要注意的是,正则表达式只是进行形式上的检查,并不保证内容一定 正确。
12
8.2 直接使用正则表达式模块re处理字符串
• Python标准库re模块提供了正则表达式操作所需要的功能。
方法
功能说明
findall(pattern, string[, flags]) 返回包含字符串中所有与给定模式匹配的项的列表
10
8.1.3 正则表达式集锦
✓ '^(\-)?\d+(\.\d{1,2})?$':检查给定字符串是否为最多带有2位小数的正数或负数。 ✓ '[\u4e00-\u9fa5]':匹配给定字符串中所有汉字。 ✓ '^\d{18}|\d{15}$':检查给定字符串是否为合法身份证格式。 ✓ '\d{4}-\d{1,2}-\d{1,2}':匹配指定格式的日期,例如2016-1-31。 ✓ '^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[,._]).{8,}$':检查给定字符串是否为强密码,必须同时
例如,“(.)\1”匹配两个连续的相同字符
\f 换页符匹配
\n 换行符匹配
4
8.1.1 正则表达式基本语法
元字符
功能说明
\r 匹配一个回车符 \b 匹配单词头或单词尾
\B 与\b含义相反 \d 匹配任何数字,相当于[0-9] \D 与\d含义相反,等效于[^0-9] \s 匹配任何空白字符,包括空格、制表符、换页符,与 [ \f\n\r\t\v] 等效
5
8.1.1 正则表达式基本语法
• 如果以“\”开头的元字符与转义字符相同,则需要使用“\\”,或者使用 原始字符串。
• 在字符串前加上字符r或R之后表示原始字符串,字符串中任意字符都不再进 行转义。原始字符串可以减少用户的输入,主要用于正则表达式和文件路径 字符串的情况,但如果字符串以一个斜线“\”结束的话,则需要多写一个 斜线,即以“\\”结束。
{n,}、{n,m})之后时,匹配模式是“非贪心的”。“非贪心的”模式匹配搜索到的、
尽可能短的字符串,而默认的“贪心的”模式匹配搜索到的、尽可能长的字符串。例
如,在字符串“oooo”中,“o+?”只匹配单个“o”,而“o+”匹配所有“o”
\ 表示位于\之后的为转义字符
\num 此处的num是一个正整数,表示子模式编号。
match(pattern, string[, flags]) 从字符串的开始处匹配模式,返回match对象或None
search(pattern, string[, flags]) 在整个字符串中寻找模式,返回match对象或None
split(pattern, string[, maxsplit=0]) 根据模式匹配项分隔字符串
字母、数字、“_”、“.”的字符串。 ✓ '^(\w){6,20}$':匹配长度为6-20的字符串,可以包含字母、数字、下划线。 ✓ '^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$':检查给定字符串是否为合法IP地址。 ✓ '^(13[4-9]\d{8})|(15[01289]\d{8})$':检查给定字符串是否为移动手机号码。 ✓ '^[a-zA-Z]+$':检查给定字符串是否只包含英文字母大小写。 ✓ '^\w+@(\w+\.)+\w+$':检查给定字符串是否为合法电子邮件地址。 ✓ r'(\w)(?!.*\1)':查找字符串中每个字符的最后一次出现。 ✓ r'(\w)(?=.*\1)':查找字符串中所有重复出现的字符。
9
8.1.3 正则表达式集锦
✓ '(a|b)*c':匹配多个(包含0个)a或b,后面紧跟一个字母c。 ✓ 'ab{1,}':等价于'ab+',匹配以字母a开头后面带1个至多个字母b的字符串。 ✓ '^[a-zA-Z]{1}([a-zA-Z0-9._]){4,19}$':匹配长度为5-20的字符串,表达式扩展语法
• 正则表达式使用圆括号“()”表示一个子模式,圆括号内的内容作为一个整 体对待,例如'(red)+'可以匹配'redred'、'redredred'等一个或多个重复'red'的 情况。
• 使用子模式扩展语法可以实现更加复杂的字符串处理功能。
7
8.1.2 正则表达式扩展语法
#处理连续的重复单词
"It's a very good idea"
>>> re.sub(r'((\w+) )\1', r'\2', s)
"It's a very goodidea"
>>> re.sub('a', lambda x:x.group(0).upper(), 'aaa abc abde')
用于正则表达式之后,表示如果=后的内容在字符串中出现则匹配,但不 返回=之后的内容
用于正则表达式之前,表示如果<!后的内容在字符串中不出现则匹配,但 不返回<!之后的内容
用于正则表达式之后,表示如果!后的内容在字符串中不出现则匹配,但 不返回!之后的内容
8
8.1.3 正则表达式集锦
✓ 最简单的正则表达式是普通字符串,可以匹配自身 ✓ '[pjc]ython'可以匹配'python'、'jython'、'cython' ✓ '[a-zA-Z0-9]'可以匹配一个任意大小写字母或数字 ✓ '[^abc]'可以一个匹配任意除'a'、'b'、'c'之外的字符 ✓ 'python|perl'或'p(ython|erl)'都可以匹配'python'或'perl' ✓ 子模式后面加上问号表示可选。r'(http://)?(www\.)?python\.org'只能匹配
>>> import re
#导入re模块
>>> text = 'alpha. beta....gamma delta' #测试用的字符串
>>> re.split('[\. ]+', text)
#使用指定字符作为分隔符进行分隔
['alpha', 'beta', 'gamma', 'delta']
>>> re.split('[\. ]+', text, maxsplit=2) #最多分隔2次
• 正则表达式在文本编辑与处理、网页爬虫之类的场合中有重要应用。
2
8.1 正则表达式语法
• 正则表达式由元字符及其不同组合来构成,通过巧妙地构造正则表达式可以 匹配任意字符串,并完成查找、替换、分隔等复杂的字符串处理任务。
3
8.1.1 正则表达式基本语法
元字符
功能说明
. 匹配除换行符以外的任意单个字符
#repl为可调用对象
'AAA Abc Abde'
16
8.2 直接使用正则表达式模块re处理字符串
>>> re.sub('[a-z]', lambda x:x.group(0).upper(), 'aaa abc abde')
* 匹配位于*之前的字符或子模式的0次或多次出现
+ 匹配位于+之前的字符或子模式的1次或多次出现
- 在[]之内用来表示范围
| 匹配位于|之前或之后的字符
^ 匹配行首,匹配以^后面的字符开头的字符串
$ 匹配行尾,匹配以$之前的字符结束的字符串
? 匹配位于?之前的0个或1个字符。当此字符紧随任何其他限定符(*、+、?、{n}、
['alpha', 'beta', 'gamma delta']
>>> re.split('[\. ]+', text, maxsplit=1) #最多分隔1次
['alpha', 'beta....gamma delta']
>>> pat = '[a-zA-Z]+'
>>> re.findall(pat, text)
包含英语字母大写字母、英文小写字母、数字或特殊符号(如英文逗号、英文句号、下划 线),并且长度必须至少8位。 ✓ "(?!.*[\'\"\/;=%?]).+":如果给定字符串中包含’、”、/、;、=、%、?则匹配失败。 ✓ '(.)\\1+':匹配任意字符的一次或多次重复出现。 ✓ '((?P<f>\b\w+\b)\s+(?P=f))':匹配连续出现两次的单词。 ✓ '((?P<f>.)(?P=f)(?P<g>.)(?P=g))':匹配AABB形式的成语或字母组合。
11
8.1.3 正则表达式集锦
• 使用时要注意的是,正则表达式只是进行形式上的检查,并不保证内容一定 正确。