面向对象与正则表达式的学习(自动更正,和代数运算)

今天我来介绍一下最近在学习的一些内容:面向对象与正则表达式

对于我来说,前者相对于好理解并且比较好学习并掌握,但后者可能由于它的繁杂的表达式和浩如烟海的标识符令我有些难以掌握,但我依然有信心把它学习好了!

先来介绍一下我们的面向对象!!

先是有几个专有名词的理解:

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

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

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

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

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

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

我们的python再玩法上其实有很多,当然想要编辑更多强大的代码实现更多的功能,我们必须学习OOP编程技能,这其中我们不仅需要知道他们各自的含义功能,还要明白语法以及各自的使用方式,情况!

下面我们来详解一波:

  • 对象(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__‘:    #运行的主函数下,这个是系统在定义类时默认的添加

这是我目前在学习的tkinter库时的一段学习代码(来源于网络),里面的形式就是运用了定义类并封装的方法,面向对象进行程序设计。

Ok!面向对象的内容基本上就是这样的啦~我们进入下一个板块!

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

下面是代码:

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)

通过定义v1,v2可以对两个向量进行上述运算(详见课本)

结果:

正则表达式:

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

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

怎么解决呢?

emmmm似乎用正则我还没办法有效解决,所以我利用了简单的语句结合之前的所学编写了以下代码:

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/iconangle/p/10720982.html

时间: 2024-10-10 09:56:37

面向对象与正则表达式的学习(自动更正,和代数运算)的相关文章

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

一.正则表达 1.概念: 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑. 2.简介: 正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符"))操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串&

pyqt 正则表达式例子学习

def rex01(self): username=QtCore.QRegExp('[a-zA-Z0-9_]{2,10}') self.names.setValidator(QtGui.QRegExpValidator(username,self)) mainname=QtCore.QRegExp("^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$") self.mains.setValidator(QtGui.QRegExpValidator(mainnam

正则表达式入门学习

\b-元字符,代表单词的开头或结尾,也就是单词的分界处. \bHi\b     下列未进行说明的都是元字符. .  匹配除了换行符以外的任意字符. * 指定*前边的内容可以连续重复使用任意次以使整个表达式得到匹配.(不包含换行的字符) \bHi\b.*\bLucy\b \d 匹配一位数字(0或1或2......或9)  0\d\d-\d\d\d\d\d\d\d\d - 不是元字符 ,只匹配它本身. 避免重复 0\d{2}-\d{8}  {2}({8})指前面\d必须连续重复匹配2次(8次). \

国内首次深度学习自动驾驶,阿波罗不再只是计划:来自百度开发者中心的观察报告

导读:从世界上首个可在真实道路上实现端到端模式的高级自动驾驶模型Road Hackers,到百度和汽车零部件厂商合作开发的车载可计算平台 BCU,从诞生之初就备受关注的"阿波罗计划"逐渐揭开了它神秘的面纱.而正如百度智能汽车事业部总经理顾维灏在主题演讲中所说,这些,不过仍是阿波罗计划的凤毛麟角. 2017年6月8日,上海 CES Asia 现场. 作为新智元特派员,我置身于上海新国际展览中心 N3 智能驾驶主题馆,被众多汽车品牌的未来炫酷车型所包围.一瞬间,仿佛回到了一个多月前同样在这

正则表达式语法学习

正则表达式用到的地方很多很广,一般用于验证 此文讲解了正则表达式的语法,以下内容转自网友[丰衣足食]的帖子 一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式.该模式描述在查找文字主体时待匹配的一个或多个字符串.正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配. \ 将下一个字符标记为一个特殊字符.或一个原义字符.或一个 后向引用.或一个八进制转义符.例如,'n' 匹配字符 "n".'\n' 匹配一个换行符.序列 '\\' 匹配

Excel 自动更正

当有复杂的字段需要重复填写怎么办呢,比如××银行卡号,××电话号码,××公司地址等.可以使用excel的"自动更正"功能解决. 1. Excel 2010的自动更正选项在哪里呢 2.在"校对--自动更正选项"里 3.输入"替换"和"为". 4.以后输入指定内容会返回替换内容.

机器码农:深度学习自动编程

转自原文机器码农:深度学习自动编程 作者简介:张俊林,中科院软件所博士,曾担任阿里巴巴.百度.新浪微博资深技术专家,目前是用友畅捷通工智能相关业务负责人,关注深度学习在自然语言处理方面的应用. 责编:何永灿,欢迎人工智能领域技术投稿.约稿.给文章纠错,请发送邮件至[email protected] 本文为<程序员>原创文章,未经允许不得转载,更多精彩文章请订阅2017年<程序员> 机器自动编程是人工智能一直以来期望攻克的重要应用领域,随着深度学习的逐步流行,最近在自动编程方向获得了

excel取消自动超链接的方法:还原和自动更正取消自动超链接

默认设置下,我们在excel表格中输入网址,一般excel都会自动将我们输入的网址自动更正为超链接.当单击该网址,就会打开相应的网页. 如果我们不想要自动添加超链接,请看下面的excel取消自动超链接的方法. excel取消自动超链接方法一:Ctrl + Z 还原 当我们输入网址之后,回车键确认结束输入,此时默认情况下,会被Excel 改成超链接,接下来,我们不做任何其他操作,马上按 下快捷键Ctrl + Z 还原,这样超链接就会被恢复为文字. 如果要输入大量的网址又不想被自动改成超链接,那么就

2 C++ ACE 面向对象跨平台网络库学习

2   C++ ACE  面向对象跨平台网络库学习  ACE I/O相关对象 阻塞式 TCP连接Linux Kernel网站服务器的443端口 非阻塞模式 TCP连接百度服务器 设置 TCP连接超时: ACE 客户端 TCP模式.请求HTTP 一个简单的 TCP HTTP server HTTP server 代码 创建网页文件 浏览器测试访问结果 ACE UDP通信单播测试: UDP 单播 服务器端: UDP 单播 客户端: ACE UDP 多播实验: UDP 多播 发送端程序: UDP 多播