类和正则表达(自动更正,和代数运算)

一、正则表达

1.概念:

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑。

2.简介:

正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符"))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,模式描述在搜索文本时要匹配的一个或多个字符串。

3.特点:

1. 灵活性、逻辑性和功能性非常强;

2. 可以迅速地用极简单的方式达到字符串的复杂控制。

3. 对于刚接触的人来说,比较晦涩难懂。

对于想了解正则表达式可通过网上搜索来了解相关内容,下面我将通过精简地去了解有关对象来让大家认识正则表达式:

二、面向对象的正则表达式:

1.面向对象:(固有名词)

面对对象编程(OOP:object oriented programming): 是一种程序设计范型,同时也是一种程序开发的方法,实现OOP的程序希望能够在程序中包含各种独立而又相互调用的对象,没一个对象又都应该能够接受数据、数据处理并将数据传达给其他对象,因此每一个对象都可以被看做一个小型的机器,而整个程序块系统就是由这些小的机器相互协助、组合构建起来的。

面对对象分析(OOA:objecet ariented analysis):即根据抽象关键的问题域来分解系统

面对对象设计(OOD:object oriented design):是一种提供符号设计系统的面向对象的实现过程,他用非常接近时机领域属于的方法吧系统构造成现实世界的对象。

类(class):告诉Python创建新类型的东西

对象(object):两个意思,即最基本的东西,或者某样东西的实例

实例(instance):这是让Python创建一个类时得到的东西

其中:

  • 对象(object):对象是数据和操作数据的方法的结合   

    对象之间的通信:对象之间进行通信的结构叫做消息,当一个消息发送给某个对象时。消息应该包含下面几种信息:

    ①接收消息的对象名(目的对象名)

    ② 接受对象去执行某种操作的信息(调用方法名)

    ③发送给该对象参数,参数可以使该对象有的变量名,或者是所有对象都知道搜的全局变量名

    ④发送给该对象的消息名(源消息名)

  • 类(class):对象的抽象是类,类的具体个性化就是对象    

    类的结构:在客观世界中有若干类,这些类之间有一定的结构关系,通常有下面两种主要结构关系:

    ①一般/具体结构称为分类结构,也可以说是is-a关系。用来描述在继承中子类与弗雷的关系,即一个派生类的实例化对象是其副类的一个例子,所以是is-a关系

    ②整体与部分结构称为组装结构,他们之间的关系是has a 关系。组合是是实现继承的方式之一,在组合继承中,一个子类可以有多个父类,即一个自类has a 一个父类。

三、面向对象的三要素:

1.封装:

概念:描述了对数据信息进行隐藏的观念,他对数据属性提供接口(接口函数)和访问方法。在类的设计时,微数据提供此相应的接口,一面客户程序通过不规范的操作来存取封装的属性。

我们一般用语法“def”定义封装内部的函数

意义:我们之前统一的认知是“程序=数据结构+算法”,现在加上简单的封装之后,我们可以理解为“程序=对象+消息”

2.继承:

概念:继承令不同类之间拥有了一定的结构与关系。

类之间的关系:①通过继承创建的新类称为“子类”或“派生类”

②被继承的类称为“基类”、“父类”或“超类”

这里又有一些特有的名词概念需要消化:

泛化:表示所有子类与其父类及祖先类有着一样的特点
特化:描述所有得子类的自定义,也就是说,什么属性让它与其父类一同。
实现继承的方式:可以通过继承和组合来实现,其中继承又有实现继承和可视继承,组合又有接口继承和纯虚类
实现继承:子类的属性和方法完全继承于父类
可视继承:子类继承父类的外观方法
接口继承:子类的属性明和方法名继承于父类,但是具体的属性值和方法实现由子类重写
多重继承:即组合继承,在java和c#中使用接口概念来实现多重继承的效果,而Python中定义类的时候,可以直接继承多个弗雷来实现多重继承。在实现多重继承时,如果继承的多个父类中均有名称相同的方法时,需要注意继承的顺序。

3.多态:

概念:多态概念指出了不同对象如何通过他们共同的属性动作来操作以及访问,而不需要考虑他们的具体的类,多态表明了动态绑定(运行时)的存在,允许重载及运行时类型确定的验证。

多态的作用:实现接口的重用,保证了在类发生继承或派生时,我们仍然能正确调用这些相关类的实例化对象的属性和方法。

面向三要素:图片了解

四、python中以下划线开头的变量名特点:

公有属性:类内外都可以被访问

私有属性:只能被类内函数调用,以‘__‘开头

内置属性:系统在定义类时默认的添加,命名格式为‘__X__‘

让我们来看一些例子:

1. def __init__(self):       #此类定义是构造一个函数,在程序启动时自动调用,一般作为实例化对象的初始化

2. def __inaccessible(self):    #私有方法,不能在类外部被访问;方法名以‘__‘开头(只有一个“_”)

3. if __name__ == ‘__main__‘:    #运行的主函数下,这个是系统在定义类时默认的添加

通过建立一个三维向量组,我们可以对他们进行一些数乘运算(有向量加法、减法、乘法和叉乘)

class vector3:
 def __init__(self, x_ = 0, y_ = 0, z_ = 0): #构造函数
  self.x = x_
  self.y = y_
  self.z = z_
 def __add__(self, obj): #重载+作为加号
  return vector3(self.x+obj.x, self.y+obj.y, self.z+obj.z)
 def __sub__(self, obj): #重载-作为减号
  return vector3(self.x-obj.x, self.y-obj.y, self.z-obj.z)
 def __mul__(self, obj): #重载*作为点乘
  return vector3(self.x*obj.x, self.y*obj.y, self.z*obj.z)
 def __pow__(self, obj): #重载**作为叉乘。不好,偏离了常理上的意义,可以考虑重载其他符号,或者直接写函数。
  return vector3(self.y*obj.z-obj.y*self.z, self.z*obj.x-self.x*obj.z, self.x*obj.y-obj.x*self.y)
 def __str__(self): #供print打印的字符串
  return str(self.x)+‘,‘+str(self.y)+‘,‘+str(self.z)
v1 = vector3(1, 2, 3)
v2 = vector3(0, 1, 2)
print (v1 + v2)
print (v1 - v2)
print (v1 * v2)
print (v1 ** v2)

结果为:

五、例题:

通过简单学习了正则表达式,我遇到了这样一道题:

编写一个程序(类),用户输入一段英文,然后输出这段英文中所有长度为3个字母的单词; 并且如果单词如果有连续重复了2次,只输出一个【例如:This is is a desk,程序输出 This is a desk】。(提示,有re,正则匹配来做)

怎么解决呢?

import re
a=[]
words=input("Input the words:")
l=re.split(‘[\. ]+‘,words)
i=0
for i in l:
    if len(i)==3:
        if i not in a:
            a.append(i)
    else:
        continue
for k in range(0,len(a)):
    print(a[k],end=‘ ‘)

结果为:

结果显示结束............................................................................................................................

原文地址:https://www.cnblogs.com/psl1234/p/10721077.html

时间: 2024-10-12 14:11:58

类和正则表达(自动更正,和代数运算)的相关文章

python关于类和正则表达( 编写一个程序(类))

1.什么是类对象,实例对象 类对象:类名实例对象:类创建的对象 2.类属性: 就是类对象所拥有的属性,它被所有类对象的实例对象所共有,在内存中只存在一个副本.对于公有的类属性,在类外可以通过类对象和实例对象访问 3. 类的结构 (1) 术语 —— 实例 1. 使用面相对象开发,第 1 步 是设计 类 2. 使用 类名() 创建对象,创建对象 的动作有两步: 3. 在内存中为对象 分配空间 2. 调用初始化方法 `__init__` 为 对象初始化 3. 对象创建后,内存 中就有了一个对象的 实实

类与正则表达

面向对象的三大特性: 封装 就是将内容封装到某个地方,以后再去调用被封装在某处的内容. 将内容封装到某处 从某处调用被封装的内容 就是将内容封装到某个地方,以后再去调用被封装在某处的内容. 第二步:从某处调用被封装的内容:有两种情况: (1)通过对象直接调用 class Foo: def __init__(self, name, age): self.name = name self.age = age def detail(self): print (obj1.name) # 直接调用对象的n

正则表达示

这里对正则表达示进行一定程度的总结.为避免太过纠结,这里避开一些 鸡肋 的正则用法. 更多文档参考官方文档 http://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html 字符 x 字符 x \\ 反斜线字符 \t 制表符 ('\u0009') \n 新行(换行)符 ('\u000A') \r 回车符 ('\u000D') \f 换页符 ('\u000C') \a 报警 (bell) 符 ('\u0007') \e 转义

Javascript正则构造函数与正则表达字面量&&常用正则表达式

本文不讨论正则表达式入门,即如何使用正则匹配.讨论的是两种创建正则表达式的优劣和一些细节,最后给出一些常用正则匹配表达式. Javascript中的正则表达式也是对象,我们可以使用两种方法创建正则表达式: 使用new RegExp()构造函数 使用正则表达字面量 先说结果,使用正则表达字面量的效率更高. 下面的示例代码演示了两种可用于创建正则表达式以匹配反斜杠的方法: 1 //正则表达字面量 2 var re = /\\/gm; 3 4 //正则构造函数 5 var reg = new RegE

ruby正则表达

1.Ruby中正则表达式的写法 主要有三种 在//之间,要进行转义 在%r{}内,不用进行转义 Regexp.new()内,不用进行转义 /mm\/dd/,Regexp.new("mm/dd"),%r{mm/dd}三者效果相同,实质都是新建了一个Regexp的类. 2.匹配的两种方法 =~肯定匹配, !~否定匹配.=~表达式返回匹配到的位置索引,失败返回nil,符号左右内容可交换 regexp#match(str),返回MatchData,一个数组,从0开始,还有match.pre_m

JavaScript使用正则表达

JavaScript使用正则表达 正则表达式概述 在前面已经涉及了一些正则表达式的用法,现在将系统地学习正则表达式的语法和 用途.正则表达式主要用于进行字符串的模式匹配,例如判断一个字符串是否符合指定格式等.例如在windows下搜索文件,可以用“*”或者“?”这样的 通配符.在正则表达式的语法中,有更多这样的符号用于表示一个字符串的模式,表7.1列出了所有的特殊符号,它们也被称为元字符. 使用这些元字符,可以表示具有特定模式的字符串,例如: /^\s*$/:匹配一个空行. /\d{2}-\d{

正则表达示 for Python3

前情提要 从大量的文字内容中找到自己想要的东西,正则似乎是最好的方法.也是写爬虫不可缺少的技能.所以,别墨迹了赶紧好好学吧! 教程来自http://www.runoob.com/python3/python3-reg-expressions.html,感谢菜鸟教程. 一. 在Python3中 正则为 re 模块 import re 二.re.match函数 re.match –>从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话match()就返回none,语法: re.match(p

HttpGet协议与正则表达

使用HttpGet协议与正则表达实现桌面版的糗事百科 写在前面 最近在重温asp.net,找了一本相关的书籍.本书在第一章就讲了,在不使用浏览器的情况下生成一个web请求,获取服务器返回的内容.于是在网上搜索关于Http请求相关的资料,发现了很多资料都是讲述基于HttpGet和HttpPost请求服务器的资源,然根据Get和Post的单词意思就大概知道Get(得到)意为从服务中获取资源,而Post(发送)意为先发送数据包返还给服务器再获取服务器资源.当然他们之间还有一些其他的区别,但是本文主要讲

正则表达基础学习(一)

0x00写在前面: 不管是PHP.Python还是JAVA等编程语言,在使用字符串匹配过程中,正则表达匹配往往是首选.下面是个人总结的关于正则表达的基本知识.初学往往只是基础,关键在于实践. 0x01正则表达式 - 概述: 正则表达式是一组由字母和符号组成的特殊文本,它可以用来从文本中找出满足你想要的格式的句子. 正则表达式可以从一个基础字符串中根据一定的匹配模式替换文本中的字符串.验证表单.提取字符串等等. 0x02正则表达式 - 基本匹配: 正则表达式其实就是在执行搜索时的格式,它由一些字母