python算法

面向对象之继承与派生

强颜欢笑 提交于 2019-12-20 08:20:06
阅读目录 一 初识继承 二 继承与抽象(先抽象再继承) 三 继承与重用性 四 派生 五 组合与重用性 六 接口与归一化设计 七 抽象类 八 继承实现的原理(可恶的菱形问题) 九 子类中调用父类的方法 一 初识继承 什么是继承 继承指的是类与类之间的关系,是一种什么是什么的关系,功能之一就是用来解决代码重用问题(比如练习7中Garen与Riven类有很多冗余的代码) 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类 python中类的继承分为:单继承和多继承 class ParentClass1: #定义父类 pass class ParentClass2: #定义父类 pass class SubClass1(ParentClass1): #单继承,基类是ParentClass1,派生类是SubClass pass class SubClass2(ParentClass1,ParentClass2): #python支持多继承,用逗号分隔开多个继承的类 pass 查看继承 >>> SubClass1.__bases__ #__base__只查看从左到右继承的第一个子类,__bases__则是查看所有继承的父类 (<class '__main__.ParentClass1'>,) >>> SubClass2.

面向对象之继承

十年热恋 提交于 2019-12-20 08:19:40
初识继承 什么是继承 继承是一种创建新类的方式,新建的类可以继承一个或多个父类(python支持多继承),父类又可称为基类或超类,新建的类称为派生类或子类。 子类会“”遗传”父类的属性,从而解决代码重用问题(比如练习7中Garen与Riven类有很多冗余的代码) python中类的继承分为:单继承和多继承 class ParentClass1: #定义父类 passclass ParentClass2: #定义父类 passclass SubClass1(ParentClass1): #单继承,基类是ParentClass1,派生类是SubClass passclass SubClass2(ParentClass1,ParentClass2): #python支持多继承,用逗号分隔开多个继承的类 pass 查看继承 SubClass1.__bases__ #__base__只查看从左到右继承的第一个子类,__bases__则是查看所有继承的父类(<class '__main__.ParentClass1'>,)SubClass2.__bases__(<class '__main__.ParentClass1'>, <class '__main__.ParentClass2'>) 提示:如果没有指定基类,python的类会默认继承object类,object是所有python类的基类

Python面向对象之继承

喜欢而已 提交于 2019-12-20 08:14:40
一、继承 面向对象的语言:c++,c#,java 面对对象的三大特性(继承、多态、封装) 其他语言都有 二、继承和抽象 实例---> 分类 ---> 汇总 逐渐抽象 编程实现:先抽象,后继承 继承的好处:继承能提高代码的重用性,还能规范代码 继承分为子类和父类 父类/超类/基类 子类/派生类 class Animal: # 父类 def __init__(self,name,kind): self.name = name self.kind = kind def sleep(self): print('%s在睡觉'% self.name) class Cat(Animal): # 子类 def catch(self): print('%s抓老鼠'% self.name) cat = Cat('小猫','咖啡猫') print(cat.name) cat.sleep() cat.catch() ------------------ 小猫 小猫在睡觉 小猫抓老鼠 ------------------ 继承的语法: class A:pass class B(A):pass class A: # 父类 ... class B(A): # B 继承 A ... 三、单继承 继承与重用 重用:子类可以使用父类中的所有属性和方法,父类中所有的属性和方法都可以被子类使用了   

数据结构与算法--Python栈 栈实现综合计算器和逆波兰计算器 前缀表达式 中缀表达式 后缀表达式 逆波兰表达式

元气小坏坏 提交于 2019-12-20 04:31:01
阅读目录 栈实现综合计算器思路及Python实现 思路 Python实现 模拟逆波兰计算器思路及Python实现 思路 Python实现 正则表达式实现计算器 栈实现综合计算器思路及Python实现 思路 先建立一个“数栈”用来压入数字,还有一个“符号栈”用来压入运算符,规定:减法从栈底向栈顶方法运算,乘除法优先级高于加减法 具体操作过程:以 “3+2 6-2” 为例 (1)数栈和符号栈皆为空,指针从左向右扫描表达式,数栈入栈第一个数3,符号栈入栈第一个扫描到的运算符‘+’,指针继续移动,遇到‘2’,直接再入数字,此时2在栈顶,3在栈底,指针继续移动遇到运算符‘ ’ (2)因为 ‘ * ’ 的优先级高于在符号栈栈底的“+”,所以直接将乘法入栈 (3)指针继续移动,遇到6,直接入数栈,指针继续移动,遇到“-” (4)当前遇到的“-” 先不要入栈,而是从数栈栈pop出栈顶的6,在从字符栈pop出栈顶的“*”,然后再从数栈pop出当前栈顶的2 ;三个元素运算,等到12,将12压入数栈,最后把符号压入符号栈,此时两个栈的栈顶元素分别为:12 和 “-” (5)指针继续移动,遇到2,压入数栈,此时表达式全部扫描完,就顺序的从数栈和符号pop出数和运算符,并运算,数栈pop出栈顶元素2 符号栈pop出栈顶元素“-” ,数栈再pop出当前栈顶元素12,用规定的“减法从栈底向栈顶方法运算”,所以

python 算法之桶排序

烂漫一生 提交于 2019-12-20 02:49:31
桶排序(Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶里。每个桶再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。桶排序是鸽巢排序的一种归纳结果。当要被排序的数组内的数值是均匀分配的时候,桶排序使用线性时间( Θ ( n ) {\displaystyle \Theta (n)} {\displaystyle \Theta (n)}(大O符号))。但桶排序并不是比较排序,他不受到 O ( n log ⁡ n ) {\displaystyle O(n\log n)} {\displaystyle O(n\log n)}下限的影响。 桶排序以下列程序进行:设置一个定量的数组当作空桶子。 寻访序列,并且把项目一个一个放到对应的桶子去。 对每个不是空的桶子进行排序。 从不是空的桶子里把项目再放回原来的序列中。 代码实现 # coding:utf-8 # !/usr/bin/env python # Time: 2018/8/9 9:31 # Author: sty # File: bucket_sort.py def bucket_sort(array, n): # 1.创建n个空桶 new_list = [[] for _ in range(n)] # 2.把arr[i] 插入到bucket[n*array[i]]

Python走心的42个代码例子

蹲街弑〆低调 提交于 2019-12-20 01:11:39
前言 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。 作者: Python与算法社区 ,zhenguo PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 http://note.youdao.com/noteshare?id=3054cce4add8a909e784ad934f956cef 告别枯燥,60秒学会一个Python小例子。奔着此出发点,我在过去1个月,将平时经常使用的代码段换为小例子,分享出来后受到大家的喜欢。 一、基本操作 1 链式比较 i = 3 print ( 1 < i < 3 ) # False print ( 1 < i <= 3 ) # True 2 不用else和if实现计算器 from operator import * def calculator ( a , b , k ) : return { '+' : add , '-' : sub , '*' : mul , '/' : truediv , '**' : pow } [ k ] ( a , b ) calculator ( 1 , 2 , '+' ) # 3 calculator ( 3 , 4 , '**' ) # 81 3 函数链 from operator import ( add , sub

二十三种设计模式及其python实现

核能气质少年 提交于 2019-12-20 00:46:43
本文源码寄方于github:https://github.com/w392807287/Design_pattern_of_python 参考文献: 《大话设计模式》——吴强 《Python设计模式》——pythontip.com 《23种设计模式》——http://www.cnblogs.com/beijiguangyong/ 设计模式是什么? 设计模式是经过总结、优化的,对我们经常会碰到的一些编程问题的可重用解决方案。一个设计模式并不像一个类或一个库那样能够直接作用于我们的代码。反之,设计模式更为高级,它是一种必须在特定情形下实现的一种方法模板。设计模式不会绑定具体的编程语言。一个好的设计模式应该能够用大部分编程语言实现(如果做不到全部的话,具体取决于语言特性)。最为重要的是,设计模式也是一把双刃剑,如果设计模式被用在不恰当的情形下将会造成灾难,进而带来无穷的麻烦。然而如果设计模式在正确的时间被用在正确地地方,它将是你的救星。 起初,你会认为“模式”就是为了解决一类特定问题而特别想出来的明智之举。说的没错,看起来的确是通过很多人一起工作,从不同的角度看待问题进而形成的一个最通用、最灵活的解决方案。也许这些问题你曾经见过或是曾经解决过,但是你的解决方案很可能没有模式这么完备。 虽然被称为“设计模式”,但是它们同“设计“领域并非紧密联系。设计模式同传统意义上的分析、设计与实现不同

python学习日记1-基础

谁都会走 提交于 2019-12-19 14:09:33
变量名只能包含字母、数字、下划线 开头只能字母或者下划线 不能数字开头 不能包含空格 慎用数字1和字母O 单双引号效果一样 自由选择谁在外面 在外面的起作用 name.title() 单词首字母大写 name.upper() 单词全大写 name.lower()单词全小写 +号用于拼接 \t 制表符 \n 换行符 name.rstrip() 删除空白 input() 用户输入 print在python3中是函数必须带括号,Python2中有些可不带括号 python可直接对整数执行加减乘除 python默认加减乘除都是整数算法(小数直接抹去) 两个数字有一个浮点数,运算结果也为浮点数 /是精确除法 //是向下取整除法 %是求模 #是注释本行 python执行import this 来源: https://www.cnblogs.com/tangcupaigu/p/11105770.html

什么是Python?

我的未来我决定 提交于 2019-12-19 12:57:40
  Python(大蟒蛇)是一门解释型、面向对象、带有动态语义的高级程序设计语言。 在于1989年,由一位名叫Guido van Rossum(吉多.范罗苏姆),为打发时间设计了Python语言,第一个发行版公开于1991年。   Python是一款纯粹的自由软件,源代码和解释器CPython都遵循了GPL(GNU General Public License)协议。   Python语法清晰简洁,最有特色的是用空白符作为语句的缩进。   Python具有强大而丰富的类库,也经常被别人说是胶水语言,可以跟其它语言(c/c++)写的模块结合在一起。常见的情况是使用Python快速生成程序的原型,然后有一部分需要有特别高的要求,需要其它语言改写。例如3D游戏中的图形渲染需要用到C/C++编写,然后封装成.py扩展类库由Python调用。需要注意的使用扩展类型需要考虑跨平台性。    优点:     1.简单:Python是一种代表简单主义思想的语言。     2.易用:Python简单容易上手,因为有简单容易看懂的文档。     3.速度快:运行速度快,因为Python中的标准库和第三方库都是C语言编写的,所以很快。     4.免费、开源:Python是一款FLOSS(自由/源代码软件)之一,使用者可以自由地发布这个软件的拷贝、阅读它的源代码、对它做改动

精悍的Python代码段

一曲冷凌霜 提交于 2019-12-19 01:42:41
1 文件处理 readlines() 和 writelines()方法可以讲列表元素依次写到文件中; file类本身没有提供复制方法,可以使用read()和write()方法模拟实现文件的拷贝,也可以使用shutil模块: shutil.copyfile('hello.txt','hello2.txt') shutil.move('hello.txt','../') shutil.copyfile('hello2.txt','hello3.txt') 批量改变当前目录中文件的名字: 方式一: files = os.listdir(".") for filename in files: pos = filename.find("."); if filename[pos+1:] == 'html': newname = filename[:pos+1] + 'htm' os.rename(filename,newname) 方式二: files = os.listdir(".") for filename in files: li = os.path.splitext(filename) if li[1] == 'html': newname = li[0] + '.htm' os.rename(filename,newname) 方式三: