python算法

Python基础Day1

生来就可爱ヽ(ⅴ<●) 提交于 2020-01-02 18:11:39
一、Python语言的发展史 1989年,为了打发圣诞节假期,Guido开始写Python语言的编译器。Python这个名字,来自Guido所挚爱的电视剧Monty Python’s Flying Circus。他希望这个新的叫做Python的语言,能符合他的理想:创造一种C和shell之间,功能全面,易学易用,可拓展的语言。 1991年,第一个Python编译器诞生。它是用C语言实现的,并能够调用C语言的库文件。从一出生,Python已经具有了:类,函数,异常处理,包含表和词典在内的核心数据类型,以及模块为基础的拓展系统。 Granddaddy of Python web frameworks, Zope 1 was released in 1999 Python 1.0 - January 1994 增加了 lambda , map , filter and reduce . Python 2.0 - October 16, 2000,加入了内存回收机制,构成了现在Python语言框架的基础 Python 2.4 - November 30, 2004, 同年目前最流行的WEB框架Django 诞生 Python 2.5 - September 19, 2006 Python 2.6 - October 1, 2008 Python 2.7 - July 3, 2010 In

PYTHON学习之路_PYTHON基础(1)

牧云@^-^@ 提交于 2020-01-02 18:10:00
学习内容: 1、Python介绍 2、Python程序初接触和变量 3、Python用户交互 4、Python数据类型 5、Python循环if...(elif)...else 6、Python循环while...else 7、Python循环for...else 8、Python循环中断break和continue 9、Python实例 一、Python介绍 1)python优缺点 先看优点: Python的定位是“优雅”、“明确”、“简单”,所以Python程序看上去总是简单易懂,初学者学Python,不但入门容易,而且将来深入下去,可以编写那些非常非常复杂的程序。 开发效率非常高,Python有非常强大的第三方库,基本上你想通过计算机实现任何功能,Python官方库里都有相应的模块进行支持,直接下载调用后,在基础库的基础上再进行开发,大大降低开发周期,避免重复造轮子。 高级语言————当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节 可移植性————由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工 作在不同平台上)。如果你小心地避免使用依赖于系统的特性,那么你的所有Python程序无需修改就几乎可以在市场上所有的系统平台上运行 可扩展性————如果你需要你的一段关键代码运行得更快或者希望某些算法不公开

学习笔记day1 python的认识

心不动则不痛 提交于 2020-01-02 18:09:45
   首先:python是一门动态解释性的强类型定义语言 Python 的优缺点 先看优点 Python的定位是“优雅”、“明确”、“简单”,所以Python程序看上去总是简单易懂。 开发效率非常高,Python有非常强大的第三方库,基本上你想通过计算机实现任何功能,Python官方库里都有相应的模块进行支持,直接下载调用后,在基础库的基础上再进行开发,大大降低开发周期,避免重复造轮子。 高级语言————当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节 可移植性————由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工 作在不同平台上)。如果你小心地避免使用依赖于系统的特性,那么你的所有Python程序无需修改就几乎可以在市场上所有的系统平台上运行 可扩展性————如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。 可嵌入性————你可以把Python嵌入你的C/C++程序,从而向你的程序用户提供脚本功能。 再看缺点: 速度慢,Python 的运行速度相比C语言确实慢很多,跟JAVA相比也要慢一些,因此这也是很多所谓的大牛不屑于使用Python的主要原因,但其实这里所指的运行速度慢在大多数情况下用户是无法直接感知到的

Python基础学习

我的未来我决定 提交于 2020-01-02 18:03:25
一、计算机基础 cpu:中央处理器,相当于人的大脑,运算中心,控制中心。 内存:暂时存储数据,与cpu交互,8G、16G、32G、64G... 优点:读取速度快。 缺点:容量小,造价高,断电即消失。 硬盘:长期存储数据,1T... 优点:容量小,造价相对低,断电不消失。 缺点:读取速度慢 操作系统:调控统领这些过程。 二、python的历史 2008年python同时更新了两个版本 pythong 2X 与python 3X 的区别: python 2X :源码不规范,重复代码较多。 不支持中文输出(需要添加 # -*- encoding:utf-8 -*-) python 3X :源码精简,优雅,美观 支持中文输出 三、编程语言的分类 编译型:将代码一次性全部编译成字节码,再执行。 代表语言:C 优点:执行速度快 缺点:不能跨平台 开发效率低 不易调试 解释型:代码从上至下逐行解释并运行。 代表语言:python 优点:可以跨平台 开发效率高 容易调试 缺点:执行速度慢 四、python的优缺点 优点:1、Python的定位是“优雅”、“明确”、“简单” 2、开发效率非常高 3、高级语言————当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节 4、可移植性————由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工

python每日经典算法题5(基础题)+1(较难题)

自作多情 提交于 2020-01-01 07:35:22
一:基础算法题5道 1.阿姆斯特朗数 如果一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数。判断用户输入的数字是否为阿姆斯特朗数。 (1)题目分析: 这里要先得到该数是多少位的,然后再把每一位的数字截取出来,把各位数字的n次方之和和该数一起判断即可 。 (2)算法分析:python中有len()函数可以得到一个字符串的长度,因此需要先把一个正整数转化为正整数字符串。然后从高位向低位截取(也可以反过来)。或者高效算法利用for循环切片。 从高位到低位: 用正整数除了10的n次方,得到的商就是高位的数,余数就是下次循环的数。 从低位到高位: 用正整数除以10,得到的余数就是低位的数,商就是下次循环的数。 for循环: 用for循环依次得到每一位数。就是可迭代对象依次显示。 (3)用到的python语法:while循环,for循环,if语句,函数。 (4)博主答题代码: 从高位到低位: def judge(num): mysum = 0 n = len(str(num)) - 1 m = n + 1 firstNum = num while num > 0: quotient = num // (10**n) remainder = num % (10**n) mysum += quotient ** m num = remainder n -= 1 if mysum =

python扩展实现方法--python与c混和编程

本秂侑毒 提交于 2020-01-01 02:54:39
前言 需要扩展Python语言的理由: 创建Python扩展的步骤 1. 创建应用程序代码 2. 利用样板来包装代码 a. 包含python的头文件 b. 为每个模块的每一个函数增加一个型如PyObject* Module_func()的包装函数 c. 为每个模块增加一个型如PyMethodDef ModuleMethods[]的数组 d. 增加模块初始化函数void initMethod() 3. 编译与测试 a. 创建setup.py b. 通过运行setup.py来编译和连接你的代码 c. 进行调试 简单性能比较 前言(更新:更方便易用的方式在http://www.swig.org/tutorial.html) 大部分的Python的扩展都是用C语言写的,但也很容易移植到C++中。 一般来说,所有能被整合或者导入到其它python脚本的代码,都可以称为扩展。 扩展可以用纯Python来写,也可以用C或者C++之类的编译型的语言来扩展。 就算是相同的架构的两台电脑之间最好也不要互相共享二进制文件,最好在各自的 电脑上编译Python和扩展。因为就算是编译器或者CPU之间的些许差异。 官方文档 http://docs.python.org/extending/windows.html 需要扩展Python语言的理由: 1. 添加/额外的(非Python)功能

python实现各种常用算法之排序算法(11)

ぐ巨炮叔叔 提交于 2020-01-01 02:46:45
python实现排序算法(三) 堆排序 堆排序(Heapsort)的基本思想:是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子节点的键值或索引总是小于(或者大于)它的父节点。 算法原理 堆排序基本思想是: 将初始待排序关键字序列(R1,R2…Rn)构建成大顶堆,此堆为初始的无序区。 将堆顶元素 R[1]与最后一个元素 R[n]交换,此时得到新的无序区(R1,R2,…Rn-1)和新的有序区(Rn),且满足 R[1,2…n-1]<=R[n]。 由于交换后新的堆顶 R[1]可能违反堆的性质,因此需要对当前无序区(R1,R2,…Rn-1)调整为新堆,然后再次将 R[1]与无序区最后一个元素交换,得到新的无序区(R1,R2…Rn-2)和新的有序区(Rn-1,Rn)。不断重复此过程直到有序区的元素个数为 n-1,则整个排序过程完成。 复杂度分析 最坏复杂度: 时间复杂度为 O(nlogn) 最好复杂度:时间复杂度在 O(nlogn) 平均复杂度: 时间复杂度为 O(nlogn) 算法实现 import random def heap_sort ( sequence ) : def heap_adjust ( parent ) : #左孩子 child = 2 * parent + 1 #孩子的索引值小于堆的长度 while child <

Python开发丨这些面试题会不会难倒你

吃可爱长大的小学妹 提交于 2020-01-01 01:12:06
   1:以下的代码的输出将是什么? 说出你的答案并解释。 class Parent(object): x = 1 class Child1(Parent): pass class Child2(Parent): pass print Parent.x, Child1.x, Child2.x Child1.x = 2 print Parent.x, Child1.x, Child2.x Parent.x = 3 print Parent.x, Child1.x, Child2.x    答案   以上代码的输出是:   1 1 1 1 2 1 3 2 3   使你困惑或是惊奇的是关于最后一行的输出是 3 2 3 而不是 3 2 1。为什么改变了 Parent.x 的值还会改变 Child2.x 的值,但是同时 Child1.x 值却没有改变?   这个答案的关键是,在 Python 中,类变量在内部是作为字典处理的。如果一个变量的名字没有在当前类的字典中发现,将搜索祖先类(比如父类)直到被引用的变量名被找到(如果这个被引用的变量名既没有在自己所在的类又没有在祖先类中找到,会引发一个 AttributeError 异常 )。   因此,在父类中设置 x = 1 会使得类变量 X 在引用该类和其任何子类中的值为 1。这就是因为第一个 print 语句的输出是 1 1 1。   随后

python面试题目

廉价感情. 提交于 2020-01-01 01:11:14
问题一:以下的代码的输出将是什么? 说出你的答案并解释。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 class Parent( object ): x = 1 class Child1(Parent): pass class Child2(Parent): pass print Parent.x, Child1.x, Child2.x Child1.x = 2 print Parent.x, Child1.x, Child2.x Parent.x = 3 print Parent.x, Child1.x, Child2.x 答案是 1 1 1 1 2 1 3 2 3 使你困惑或是惊奇的是关于最后一行的输出是 3 2 3 而不是 3 2 1 。为什么改变了 Parent.x 的值还会改变 Child2.x 的值,但是同时 Child1.x 值却没有改变? 这个答案的关键是,在 Python 中,类变量在内部是作为字典处理的。如果一个变量的名字没有在当前类的字典中发现,将搜索祖先类(比如父类)直到被引用的变量名被找到(如果这个被引用的变量名既没有在自己所在的类又没有在祖先类中找到,会引发一个 AttributeError 异常 )。 因此,在父类中设置 x = 1 会使得类变量 X 在引用该类和其任何子类中的值为 1。这就是因为第一个 print 语句的输出是

Web框架之Tornado

懵懂的女人 提交于 2019-12-31 01:05:31
Web框架之Tornado 概述 Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本。这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过为了能有效利用非阻塞式服务器环境,这个 Web 框架还包含了一些相关的有用工具 和优化。 Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于其 非阻塞的方式和对 epoll 的运用,Tornado 每秒可以处理数以千计的连接,这意味着对于实时 Web 服务来说,Tornado 是一个理想的 Web 框架。我们开发这个 Web 服务器的主要目的就是为了处理 FriendFeed 的实时功能 ——在 FriendFeed 的应用里每一个活动用户都会保持着一个服务器连接。(关于如何扩容 服务器,以处理数以千计的客户端的连接的问题,请参阅 C10K problem 。) 下载安装: ? 1 2 3 4 pip3 install tornado 源码安装 https: / / pypi.python.org / packages / source / t / tornado / tornado - 4.3 .tar.gz 框架使用 一、快速上手 + View Code ? 1 2