类和正则表达(自动更正,和代数运算)
Posted psl1234
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类和正则表达(自动更正,和代数运算)相关的知识,希望对你有一定的参考价值。
一、正则表达
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=‘ ‘)
结果为:
结果显示结束............................................................................................................................
以上是关于类和正则表达(自动更正,和代数运算)的主要内容,如果未能解决你的问题,请参考以下文章