递归函数、二分查找、面相对象初识、类空间,对象空间、组合、继承

一、递归函数

一般递归100多次,都没有解决的问题,放弃递归。

默认递归深度:998

修改默认递归次数

import sys

sys.setrecursionlimit(100000) #设置十万次

count = 0

def func1():

global count

count += 1

print(count)

func1()

func1()

用递归 解决一个年龄问题。

alex 他比佩奇 大两岁。  4   age(3) + 2

佩奇 他比日天 大两岁。  3   age(2) + 2

日天 他比太白 大两岁。  2   age(1)  + 2

太白:我今年23.         1   23

def age(n):

if n == 1:

return 23

else:

return age(n-1) + 2

print(age(4))

二、二分查找

l = [2,3,5,10,15,16,18,22,26,30,43,55,56,66,67,69,72,76]

有序的不重复数字列表

查询到66 索引

print(l.index(66))  # 方法一

不用index查询66的索引

index = 0

for i in l:

if i == 66:

print(index)

index += 1

for i in range(len(l)):

if l[i] == 66:

print(i)

利用递归函数,通过二分查找的方法寻找目标的索引

l = [2,3,5,10,15,16]

因为每次切片,改变了原列表,进而改变了索引。

#根据所想瞎写的查找

def two_search(l,aim):

mid_index = len(l) // 2

if aim > l[mid_index]:

return two_search(l[mid_index+1:],aim)

elif aim < l[mid_index]:

return two_search(l[:mid_index],aim)

elif aim == l[mid_index]:

return mid_index

else:

return ‘没有此值‘

#查找16的索引

l1 = [2,3,5,10,15,16]

def two_search(l,aim,start=0,end=None):

end = len(l) - 1 if end is None else end

if end >= start:

mid_index = (end - start) // 2 + start

if aim > l[mid_index]:

return two_search(l,aim,start=mid_index+1,end=end)

elif aim < l[mid_index]:

return two_search(l,aim,start=start,end=mid_index-1)

elif aim == l[mid_index]:

return mid_index

else:

return ‘没有此值‘

else:

return ‘没有此值‘

print(two_search(l1,5))

三、面相对象初识

什么是类

类:是具有相同属性和技能的一类事物。

什么是对象

实例化的一个类,是类的具体体现。

猫就是一类,我家楼下那只小花猫,这是一个对象。(小花猫是个具体的对象)

类开头首字母 大写

class Person:  # class 关键字,定义了一个类

‘‘‘

类里面的所有内容

‘‘‘

animal = ‘高级动物‘ # 静态变量

soup = ‘有思想‘  # 静态变量

def __init__(self,name,sex,eye,high,weight,):  # 构造方法

self.eye = eye  # 属性

self.name = name

self.sex = sex

self.high = high

self.weight = weight

print(666)

#self默认不用填写

def work(self): # 动态变量,动态方法,方法

print(self)

# self.job = ‘IT‘

print(‘人会工作....‘)

类 查看 静态变量,动态变量

1.类名.__dict__方法 #只能查看,不能增删改

print(Person.__dict__)

print(Person.__dict__[‘animal‘])

Person.__dict__[‘name‘] = ‘alex‘

Person.__dict__[‘animal‘] = ‘低级动物‘

2.类名.变量名 #可增删改查

print(Person.animal)

print(Person.soup)

Person.kind = ‘有性格‘

Person.animal = ‘低等动物‘

del Person.kind

print(Person.__dict__)

PS:想查询全部的静态变量时,用__dict__

其他全部都用类名.变量名 。

类  操作 方法有两种方式

1、类名.__dict__[方法名]()

print(Person.__dict__[‘work‘](11))

2、类名.方法名

Person.work(11)

对象

类名() #实例化一个对象

p1 = Person() #p1 对象,实例化对象,类名()过程就叫做实例化。

只要实例化一个对象,自动触发__init__

内部进行三步:

1,实例化一个对象,在内存中产生一个对象空间。

2,自动执行init方法,并将这个空间对象。 <__main__.Person object at 0x0000000001F5ABE0> 传给self

3,通过构造方法里的代码给空间对象添加一些属性,并返回给对象。

p1 = Person(‘峰哥‘,‘男‘,‘大眼睛‘,176,170)

print(p1.__dict__)

666

{‘eye‘: ‘大眼睛‘, ‘name‘: ‘峰哥‘, ‘sex‘: ‘男‘, ‘high‘: 176, ‘weight‘: 170}

对象 查看 静态变量,动态变量

1、对象.__dict__方法 #只能查看,不能增删改

2、对象.变量名 #可增删改查

print(p1.name)

print(p1.eye)

p1.color = ‘黄皮肤‘

print(p1.color)

print(p1, type(p1))

3、可以访问类的静态变量

print(p1.__dict__)

print(p1.animal)

print(p1.soup)

一般你想查询全部的静态变量时,用__dict__ 其他全部都用类名.变量名。

对象 操作 两种方式

1、对象.方法名()

p1.work()

print(p1)

print(p1.__dict__)

2、类名.方法名(对象)

Person.work(111)

Person.work(p1)

四、类空间,对象空间

class Person:

animal = ‘高级动物‘     # 静态变量

soup = ‘有思想‘    # 静态变量

name = ‘taibai‘

def __init__(self,name,sex,eye,high,weight,):   # 构造方法

self.eye = eye      # 属性

self.name = name

self.sex = sex

self.high = high

self.weight = weight

print(666)

def work(self,job):     # 动态变量,动态方法,方法

self.name = ‘oldboy‘

self.job = job

print(‘人会工作....‘)

#self 约定俗称叫self 不能改变。

p1 =  Person(‘alex‘,‘女‘,‘小眼睛‘,178,160)

print(p1.name)

666

alex

print(p1.__dict__)

666

{‘eye‘: ‘小眼睛‘, ‘name‘: ‘alex‘, ‘sex‘: ‘女‘, ‘high‘: 178, ‘weight‘: 160}

print(p1.eye)

666

小眼睛

练习一:在终端输出如下信息

小明,10岁,男,上山去砍柴

小明,10岁,男,开车去东北

小明,10岁,男,最爱大保健

老李,90岁,男,上山去砍柴

老李,90岁,男,开车去东北

老李,90岁,男,最爱大保健

方法一、

def chop_wood(name,age,sex):

print(‘%s,%s岁,%s,上山去砍柴‘%(name,age,sex))

def driver(name,age,sex):

print(‘%s,%s岁,%s,开车去东北‘%(name,age,sex))

def healthcare(name,age,sex):

print(‘%s,%s岁,%s,最爱大保健‘%(name,age,sex))

chop_wood(‘小明‘,12,‘男‘)

driver(‘小明‘,12,‘男‘)

healthcare(‘小明‘,12,‘男‘)

chop_wood(‘老李‘,22,‘男‘)

方法二、

class Dayaction:

def __init__(self,name,age,sex):

self.name = name

self.age = age

self.sex = sex

def chop_wood(self):

print(‘%s,%s岁,%s,上山去砍柴‘%(self.name,self.age,self.sex))

def driver(self):

print(‘%s,%s岁,%s,开车去东北‘%(self.name,self.age,self.sex))

def healthcare(self):

print(‘%s,%s岁,%s,最爱大保健‘%(self.name,self.age,self.sex))

p1 = Dayaction(‘小明‘, 15, ‘男‘)

p1.chop_wood()

p1.driver()

p1.healthcare()

五、组合

给一个类对象的属性 封装 另一个类的对象。

class Game_person:

def__init__(self,nickname,sex,hp,ad):

self.nickname = nickname

self.sex = sex

self.hp = hp

self.ad = ad

def attack(self,p):

p.hp -= self.ad

print(‘%s攻击了%s,%s还剩%s血量‘%(self.nickname,p.nickname,p.nickname,p.hp))

def weapon_attack(self,武器):

self.武器 = 武器 #斧子对象

class Weapon:

def __init__(self,name,ad):

self.name=name

self.ad=ad

def fight(self,p1,p2):

p2.hp -= self.ad

print(‘%s使用%s打了%s%s血,%s还剩%s滴血‘\

%(p1.nickname,self.name,p2.nickname,self.ad,p2.nickname,p2.hp))

ts = Game_person(‘泰森‘,‘男‘,200,50)

barry = Game_person(‘太白‘,‘男‘,100,10)

fuzi = Weapon(‘斧子‘,60)

六、继承

面向对象三大特点:

封装

继承

多态

继承:单继承,多继承。

继承:可以有效的节省代码。

继承是一种创建新类的方式,在python中,

新建的类可以继承一个或多个父类,父类又可称为基类或超类,

新建的类称为派生类或子类

类分为两种:新式类,经典类。但是python3x中只有新式类。

新式类 :遵循的广度优先。

经典类 :遵循的深度优先。

class Animal:

soup = ‘灵魂‘

def __init__(self,varieties, sex, color):

self.varieties = varieties

self.sex = sex

self.color = color

def eat(self):

print(‘吃‘)

class Cat(Animal):

a = Animal.eat

def eat(self):

print(‘猫吃饭‘)

#Cat 继承 Animal

多继承 钻石继承

class A:

def func(self):

print(‘A‘)

class B(A):

pass

def func(self):

print(‘B‘)

class C(A):

pass

def func(self):

print(‘C‘)

class D(B,C):

pass

d1 = D()

d1.func()

class A:

def func(self):

print(‘A‘)

class B(A):

pass

def func(self):

print(‘B‘)

class C(A):

pass

def func(self):

print(‘C‘)

class D(B):

pass

def func(self):

print(‘D‘)

class E(C):

pass

def func(self):

print(‘E‘)

class F(D,E):

pass

def func(self):

print(‘F‘)

print(F.mro()) #mro差看继承走位

原文地址:https://www.cnblogs.com/dunkeng/p/9189802.html

时间: 2025-01-14 09:20:41

递归函数、二分查找、面相对象初识、类空间,对象空间、组合、继承的相关文章

javascript学习笔记---ECMAScriptECMAScript 对象----定义类或对象

使用预定义对象只是面向对象语言的能力的一部分,它真正强大之处在于能够创建自己专用的类和对象. ECMAScript 拥有很多创建对象或类的方法. 原始的方式 因为对象的属性可以在对象创建后动态定义(后绑定),类似下面的代码: var oCar = new Object; oCar.color = "blue"; oCar.doors = 4; oCar.mpg = 25; oCar.showColor = function() { alert(this.color); };不过这里有一

225 对象与类 之 对象

2.1 对象 对象是由属性和方法组成的:是一个无序键值对的集合,指的是一个具体的事物 属性:事物的特征,在对象中用属性来表示(常用名词) 方法:事物的行为,在对象中用方法来表示(常用动词) 2.1.1 创建对象 //以下代码是对对象的复习 //字面量创建对象 var ldh = { name: '刘德华', age: 18 } console.log(ldh); //构造函数创建对象 function Star(name, age) { this.name = name; this.age =

JavaScript 浅析数组对象与类数组对象

数组(Array对象) 数组的操作 创建数组方法 添加与修改数组元素 删除数组元素 使用数组元素 遍历数组元素 多维数组 数组相关的函数 concat() join() pop() push() shift() unshift() reverse() sort() slice() splice() 类数组对象 定义 举例 对比数组 转换 间接 直接 数组(Array对象) 数组就是一组数据. 在JavaScript中没有数组这种数据类型.数组时对象创建的. 键(下标): 用于区分数组中不同数值的

8.python之面相对象part.1(初识类与对象)

一.类和对象的概念. 什么是类 类就是把一类事物相同的特征和动作整合到一起就是类比如说"人"就是一个类. 什么是对象 对象就是基于类创建出来的一个具体存在的事物这个事物包含了将其创造出来的类的特征和动作. 类与对象有什么关系一切的对象都是由类产生的假如说造一支笔首先要有一个造笔的模版上帝制造人也是一样制造一个人也需要一个造人的模版这个模板就是人的"类"然后根据类的定义来产生一支支笔和一个个的人. 什么是实例化 由类产生对象的过程就是实例化类实例化的结果就是一个对象对

python基础-第七篇-7.1初识类和对象

创建类和对象 刚开始我们接触得多的编程方式为面向过程编程,这种方式就是根据业务逻辑从上往下垒代码,后来又出现了函数式编程,就是为了提高代码的重用性,减轻程序猿的工作量--而今天我们即将学的 面向对象编程则是使用类和对象来实现的,类就是一个模板,模板里可以包含多个函数,函数里实现一些功能 对象则是根据模板创建的实例,通过实例对象可以执行类中的函数 class是关键字,表示类 创建对象--类名称后加括号 #创建类 class foo: def bar(self): print('bar') def

day25--python初识类和对象

一.面向对象的定义 说到面向对象,我们先来看一下面向过程的定义:面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西.优点:降低了程序的复杂度,使得程序的运行过程变得直观明了.缺点:一套流水线或者流程就是用来解决一个问题,生产汽水的流水线无法生产汽车,即便是能,也得是大改,改一个组件,牵一发而动全身. 面向对象的定义:面向对象的程序设计的核心是对象,万物皆对象.优点:解决了程序的扩展性.对某一个对象单独修改,

什么是类,什么是对象,类和对象之间的关系

类的概念:类是具有相同属性和服务的一组对象的集合.它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分.在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属性说明和服务说明两个主要部分. 对象的概念:对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位.一个对象由一组属性和对这组属性进行操作的一组服务组成.从更抽象 的角度来说,对象是问题域或实现域中某些事物的一个抽象,它反映该事物在系统中需要保存的信息和发挥的作用:它是一组属性和有权对这

【PHP面向对象(OOP)编程入门教程】2.什么是类,什么是对象,类和对象之间的关系

类的概念:类是具有相同属性和服务的一组对象的集合.它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分.在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属性说明和服务说明两个主要部分. 对象的概念:对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位.一个对象由一组属性和对这组属性进行操作的一组服务组成.从更抽象 的角度来说,对象是问题域或实现域中某些事物的一个抽象,它反映该事物在系统中需要保存的信息和发挥的作用:它是一组属性和有权对这

[Effective JavaScript 笔记]第58条:区分数组对象和类数组对象

示例 设想有两个不同类的API.第一个是位向量:有序的位集合 var bits=new BitVector(); bits.enable(4); bits.enable([1,3,8,17]); bits.bitAt(4);//1 bits.bitAt(8);//1 bits.bitAt(9);//0 enable方法被重载了,可以传入一个索引或索引的数组.第二个类的API是字符串集合:无序的字符串集合 var set=new StringSet(); set.add('Hamlet'); se

什么是类?什么是对象?类和对象有什么关系?

面向对象(Object Oriented,OO). 起初,"面向对象"是指在程序设计中采用封装.继承.多态等设计方法.现在,面向对象的思想已经涉及到软件开发的各个方面.如,面向对象的分析(OOA,ObjectOriented Analysis),面向对象的设计(OOD,Object Oriented Design).以及面向对象的编程实现(OOP,Object Oriented Programming). 对象和类解释: 1)对象:对象是人们要进行研究的任何事物,它不仅能表示具体的事物