Python
PYB不开心
这个作者很懒,什么都没留下…
展开
-
python学习:最简单的web应用(WSGI接口)
web应用本质上来说就是:浏览器发送一个HTTP请求;服务器收到请求,生成一个HTML文档;服务器把HTML文档作为HTTP响应的Body发送给浏览器;浏览器收到HTTP响应,从HTTP Body取出HTML文档并显示。[0]我们要生成一个动态的web应用.如果由自己来写底层代码就太麻烦了.所以python提供了一个统一的接口,让我m只需要处理浏览器的请求,而不用去管各种协议.这个接口就是WGSI.原创 2016-03-24 20:26:33 · 2822 阅读 · 0 评论 -
Flaskweb实战开发的总结(前6章)
首先是对模板的介绍,jinja2模板渲染有着很强大的功能,可以帮助我们实现动态,继承的需求.通过传入参数,我们可以直接动态的为模板绑定变量.通过继承,可以大大的减少所需要的Html的代码量.并且更好的组织结构.对于继承,jinjia2模板采用的是{%block %}content{%endfor%}的模式来实现的,我们可以在模板里面添加或者重置我们需要的东西.如果需要添加,就应该用{{super()原创 2016-04-18 18:57:37 · 2853 阅读 · 1 评论 -
算法竞赛入门经典第四章例题总结:
计算组合数def cnm(n,m): if(m < n-m): m = n-m a = 1;b = 1;ans = 0 for i in range(m+1,n+1): a *= i b *= (i-m) print(a//b)cnm(21,1)这道题本身很简单,但是一个注意一点,利用m猜测字谜游戏:输入单词和猜测,并输出结果。题目非原创 2016-04-28 20:56:40 · 823 阅读 · 0 评论 -
算法竞赛入门经典第四章:部分习题解答
跳过了部分习题。。。习题4-2:此题不难,我采取最直接的办法,暴力遍历进行判断,代码如下:def do_squares(h,v,n):#h,v是一个矩阵 def test(i,j,l): _i = i;_j = j while(_j<j+l): if(h[_i][_j]==0):return False _j+=原创 2016-05-07 14:26:38 · 803 阅读 · 0 评论 -
算法竞赛入门第五章(竞赛题目选讲)解析:
例题5-8,此题不难,关键在于将files排序后能够找到对应的列数和行数(行数要小心n是cols倍数的特殊情况,所以要用n-1去除),然后按行输出。因为是列优先,所以索引的求解变成j*rols+i。def format_files(files): M = len(max(files,key = lambda x:len(x))) def Print(s,extra):原创 2016-06-04 16:22:08 · 431 阅读 · 0 评论 -
算法竞赛入门第五章习题分析(部分)
这个题目不难,关键是理解题意,注意到是每一个单词的左边界的都要对齐而且要尽量往左靠,一开始我看成每一行了,结果写了半天觉得不对劲。有一个细节要注意,在使用split()进行分割时,会将空字符串也放进去,我们需要进行判断,如果遇到空字符就跳过。另外就是对每一列的最长单词进行统计,这样我们才能够对齐单词。def format_print(): line = input() words =原创 2016-06-08 21:47:15 · 475 阅读 · 0 评论 -
算法竞赛入门经典第6章例题(2):二叉树部分+四分树
6−66-6这是一道有关二叉树的1题目,但是如果你真的对它用二叉树进行模拟就入坑了,不需要真正的实现二叉树,也无关小球的编号大小,我们只需要判断第i次小球在第d层的行为既可。假设向左为0向右为1,这个行为序列的规律是:000,100,010,110,001,101,011,111。即第k位每2k−12^{k-1}变动一次,根据这个规律,我们可以直接求解最终的位置。def get_track(i,D)原创 2016-07-21 17:35:50 · 655 阅读 · 0 评论 -
Python学习:基础(5)任意**m进制到n进制**的转换
[0]内置的那些函数,可以通过help或者https://docs.python.org/3/library/进行查阅.[1]对进制的转换,10进制整数到2,8,16,bin(),oct(),hex()就可以转换到相应的进制了.[2]各个进制到10进制的转换,int(obxxxxx),int(ox…..)或者int(‘xxxxxxxxxx’,2),int(‘xxxxxxxx’,8)以下代码作为练习求原创 2016-02-29 16:46:15 · 7990 阅读 · 2 评论 -
SICP_Python版本第二章:序列作为约定界面
利用reduce,map,filter,[expressionforinsiftest(s)]可以进行模块化的设计,大大减少了编程的负担利用reduce,map,filter,[expression for i n s if test(s)]可以进行模块化的设计,大大减少了编程的负担比如下面,一行代码就写出fib数列的前n项,然后再过滤求和。def sum_even_fibs(n): s =原创 2016-07-17 18:59:13 · 518 阅读 · 0 评论 -
flask框架:Python 3.5下使用 flask_SqlAlchemy和mysql
今天学习了一下flask_SqlAlschemy的使用,它是基于flask和SqlClchemy的对数据库进行操作的一个关系型数据库框架.内置了orm.首先是定义模型:,注意要怎么才能配置好数据库,很多教程上都是sqlLite的,而我们需要的则是mysql,具体配置如下,因为MySQlDB不支持python3了,所以我用pymysql,这是一个纯python写的支持mysql操作的第三方库.因为这个原创 2016-04-16 11:39:03 · 8303 阅读 · 0 评论 -
算法竞赛入门经典第三章总结(2):后半部分习题解答
UVA232:题目就不写了,主要是模拟单词的变换.注意必须要按照启示格的顺序来输出.在输出竖的单词时候要用一个矩阵来标记是否被访问过.当然还可以按照竖的方式写入然后再排序.def cross(matrix,r,c): mark = [[0]*c for i in range(r)] def test(i,j):#检查一个白格是不是启示格 #if(matrix[i][j原创 2016-04-28 11:19:03 · 357 阅读 · 1 评论 -
算法竞赛入门经典第三章总结(python实现)
#开灯问题def N_lamps(n,k): L = [0]*(n+1) for i in range(1,k+1): factor = 1 while(factor*i<=n): L[factor*i] = 1-L[factor*i]#1代表开 factor += 1 for k,i in e原创 2016-04-27 20:36:31 · 1485 阅读 · 1 评论 -
Python练习(1):递归和动态规划的简单应用
首先考虑一个问题,假如我们在某个编译器上写出了这样的式子:(i++)(i++)(i++),假设i = 5,那么会有多少可能的结果?显然,编译器对这种行为是未定义的,我们不知道i自增和乘法指令的执行顺序,可能的结果有5*5*5, 5*5*6, 5*5*7, 5*6*6, 5*6*7一共5种.那么问题来了,假如n个i++相乘,可能会有多少种情况???对这个问题有多种解法,首先可以将其看作一个类似于排列组原创 2016-03-01 10:52:59 · 2840 阅读 · 0 评论 -
Python学习:Flask框架和jinja2模板
上一次使用了WSGI提供的接口构建了一个简单的web应用,但是WSGI提供的接口相对于web应用的逻辑来说还是太低级了,如果要处理不同的url那么wsgi里面的处理就会非常麻烦.所以python提供了很多的web框架,我们这需要用装饰器把自己的函数和不同的url关联起来就可以了.from flask import Flaskfrom flask import requestapp = Flask原创 2016-03-25 12:31:26 · 3044 阅读 · 0 评论 -
Python学习:异步IO:协程和asyncio
所谓协程就是在一个线程中切换子进程,相比多线程有如下好处:最大的优势就是协程极高的执行效率。因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,和多线程比,线程数量越多,协程的性能优势就越明显。第二大优势就是不需要多线程的锁机制,因为只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不加锁,只需要判断状态就好了,所以执行效率比多线程高很多。python的协程通过gene原创 2016-03-26 14:51:57 · 16220 阅读 · 1 评论 -
Python:用generator构造树和遍历(探究yield和yield from)
[0]:以前初步的了解了yield,今天在稍微深入的学习一下.[1]首先含有yield关键字的函数就是协程,也是generator,注意,这个generator不再是函数的调用方式了,具体看一个例子class Node(object): def __init__(self,value): self._left = [] self._right = []原创 2016-03-26 23:47:19 · 3094 阅读 · 0 评论 -
python 元类的使用(orm框架搭建)
元类是python面向对象编程里面很难理解的一个东西,所谓元类的就是类的类,它用来创建类,在python里面,类也是一个对象!!!.元类的作用就是动态的创建类.在python里面type就是元类,我们所有的class定义类的语句都会被python解释为使用用type来创建一个类.废话少说,首先看一下怎么用元类来解决一个动态创建类的需求,要求我们对于某一类型的类的满足某个条件的属性名字都变成大写!比如原创 2016-03-28 22:46:49 · 2892 阅读 · 1 评论 -
算法竞赛入门经典(1,2章的python实现)
可以说几乎没有什么难题,但是有几个地方还是值得注意.关乎一些编程的技巧.首先对于最大最小值,注意最好还是用第一个数组里的值作为初始值,避免了人为的假设最大值和最小值.对于浮点数的运算,一定要注意误差,比如转换成整数的时候要采用四舍五入的办法比如调用round函数或者int(f+0.5)。要求四舍五入的时候注意要多求一位.用好双端队列.def average(a,b,c): print('%.原创 2016-04-26 20:22:48 · 1755 阅读 · 0 评论 -
O(NlogN)复杂度选取出现次数超过一半的元素(递归版本)
这个问题以前在书上碰到过,书上采取的办法是从相邻的两个数开始挑选,保证该元素一定会进入下一次的候选集合,且仍然满足出现次数超过一半,具体实现采用的C++.这一次我重新想了一个办法,利用分治算法递归的去实现:主要思路是获取两个子区间内的主元(出现次数超过一半的元素)。如果两个主元一致则就是该区间的主元。否则出现次数较大的那一个主元有可能是主元。那么就要遍历另一半区间计算可能的主元出现的总次数。最后判断原创 2016-06-07 14:55:18 · 804 阅读 · 0 评论 -
SICP_Python第二章:映射(子集问题,排列问题,N皇后问题)
下面是自己实现的map方法。def simple_map(proc,items): result = [] for item in items: result.append(proc(item)) return resultdef scale_list(items,factor): return simple_map(lambda x:x*facto原创 2016-07-16 17:55:33 · 632 阅读 · 0 评论 -
Python小技巧
(1)(1)如何将高维数据降维只需要一行代码就可以将树状结构的数据平扁化from collections import Iterabledef flat(s):return reduce(lambda x,y:x+flat(y) if isinstance(y,Iterable) else x+[y],s,[])print(flat([(1,2,3),[2,3],5,[1,[2,3,{4,5,(6原创 2016-07-21 16:37:51 · 867 阅读 · 0 评论 -
python编程技巧--python--cookbook学习笔记(5)
[0]跳过可迭代对象的开始部分[0] 跳过可迭代对象的开始部分你想遍历一个可迭代对象,但是它开始的某些元素你并不感兴趣,想跳过它们。比如说我们想要跳过一个文本文件开头的注释。可以使用一个叫做dropwhile()的函数,它会一直跳过直道函数的返回值不为真。 from itertools import dropwhile with open('/etc/passwd') as f:原创 2016-10-06 20:34:14 · 465 阅读 · 0 评论 -
Python Challenge 0-9
这是一个神奇的网站….现在卡在第七题还没有做出来。。。(0)(0):较简单,首先尝试了238发现不对,然后尝试2^38次方即可成功跳转url.(1)(1):题目是这样:很容易想到将每个字母往后推2个,然后将下面哪一句话转换一下即可发现并不是答案而是让你对url进行decode,对url里面的map做一点微小的工作即可pass。(2):(2):如果不告诉你source page还是有点难想到,但是说了原创 2016-11-13 15:10:21 · 2086 阅读 · 0 评论 -
Leetcode-Sudoku Solver(数独)
这道题的解题思路如下:(1):维护一个list,里面保存所有未确定元素的取值集合(1):维护一个list,里面保存所有未确定元素的取值集合(2):每次从list里面取集合长度最小的集合,然后开始进行dfs(2):每次从list里面取集合长度最小的集合,然后开始进行dfs(3)每确定一个元素,就要更新对应的行,列,block所在的所有元素对应的集合(3)每确定一个元素,就要更新对应的行,列,block原创 2016-10-11 20:42:32 · 419 阅读 · 0 评论 -
一行python能做什么!
主要收集了平常遇到的代码和网上的简单题目,然后尝试将代码压缩到一行,仅仅是娱乐一下~~~−−−−−(1)−−−−−−-----(1)------用一行python写出一个嵌套的字符串。def plat(ch,n):return''if ~n else ' '*(n-1)+ ch+ch[::-1][1:]+'\n'+plat(ch+chr(ord(ch[-1])+1),n-1)结果如图: 上面这个返原创 2016-10-11 12:37:20 · 3029 阅读 · 0 评论 -
三角形填充和分形练习
画出一个六角星,在六角星的两条边上的三等分点作一个新的等边三角形,然后递归的做下去,并且图形的内部必须填充颜色。[0]:首先考虑如何画出一个六角星,基本方法是:先画一个三角形,然后对每一条边的两个三等分点求出第三个顶点,这样以新的三个点作一个三角形和原来的三角形合成在一起就得到了六角星。[1]:接下来考虑如何对每一个小的三角形进行分形:我们以一个三角形的三个顶点作为参数,我们只需要其中的两条边(每条原创 2017-01-09 13:51:54 · 1412 阅读 · 0 评论 -
A-priori算法的优化实现
前几天做了一个作业,要求算出0-9999每一个的质因子计算出频繁集。以前的简单程序计算太慢,需要30多秒,仔细思考了一下,发现计算过程有很多的冗余。花了3个小时进行优化,结果改进到0.15s就可以算出来。(1)优化1:(1)优化1:不再区分每一个bucket对应的k频繁集,而是将所有的频繁集放在一个集合里面。(2)优化2:(2)优化2:针对每一个候选频繁集的过滤,我们可以采取如下策略:因为候选频繁集原创 2016-10-08 11:17:25 · 1137 阅读 · 0 评论 -
python技巧(2):--python cookbook学习笔记
(1):将一个16进制的数转换成xxxx.xxxx.xxxx.xxxx的形式。利用zfill这个函数以及bin().def convert(IP): bin_str = str.zfill(bin(int(IP,16))[2:],32) return '.'.join([str(int(bin_str[k*8:(k+1)*8],2)) for k in range(4)])(2):利原创 2016-09-29 00:13:10 · 610 阅读 · 0 评论 -
SICP_Python版:Chapter 2:Implement simple object system
SICP介绍了如何利用简单的闭包来保存状态,从而来构造一个简单的object系统,加深对python object system实现的理解.(1)实现类的构造:(1) 实现类的构造:很容易理解这个代码:首先看参数是一个dictionary,里面存储着一个类的各个属性(property,method).我们将这个attributes作为参数保存起来,然后创建一改局部的dict里面有两个key_valu原创 2016-08-27 20:32:20 · 475 阅读 · 0 评论 -
SICP_Python版第三章:递归与迭代
这一章的开头讲了两种递归的方式,树状和线性。其实就是原版SICP第一章讲过的。(1)(1)书上给出了一个很精巧的程序用来描述一个过程,这个过程将树状递归的函数通过空间换时间的方式改写成一个线性递归的结构。这段代码的精巧之处在于,通过f参数来绑定原来的递归函数。然后通过memo函数的返回值将原来递归函数的名字绑定在memorized这个函数上面。这样一旦调用f,它内部的两个fib就不再调用本身,而是调原创 2016-08-31 11:42:13 · 669 阅读 · 0 评论 -
算法竞赛入门第七章(1):暴力枚举
例题1例题1:此题比较简单,先写一个10取5的排列函数(可以适用其他的排列),然后进行进行查表。当然如果解约空间就可以直接循环加判定字母是否重复来解。def create(m,obj = list(range(10))): def remove_2(x,L): L = L[::] L.remove(x) return L ans = [原创 2016-08-14 19:20:27 · 551 阅读 · 1 评论 -
python技巧(4)----python cookbook学习笔记
(1):使用re来进行字符串分解:(1):使用re来进行字符串分解:简单解释一下为什么要这样写,首先[]里面代表一个字符,但是如果我们不加后面的\s*,那么匹配到’,’之后后面的空白就会变成捕捉的内容,这是我们不需要的! line = 'asdf fjdk; afed, fjek,asdf, foo' re.split(r'[;,\s]\s*',line)另外如果里面有括号捕获分组,那么括号捕获的原创 2016-09-30 16:51:15 · 631 阅读 · 0 评论 -
Python建立简易语音识别系统
将AI课上学习的知识进行简单的整理,可以识别简单的0-9的单个语音。基本方法就是利用库函数提取mfcc,然后计算误差矩阵,再利用动态规划计算累积矩阵。并且限制了匹配路径的范围。具体的技术网上很多,不再细谈。现有缺点就是输入的语音长度都是1s,如果不固定长度则识别效果变差。改进思路是提取有效语音部分。但是该部分尚未完全做好,只写了一个原形函数,尚未完善。 import waveimport num原创 2016-10-24 22:55:51 · 35413 阅读 · 5 评论 -
华为面试题:求n对括号的所有合法表达式(两种简洁做法)
这个题目其实以前写过,但是现在再看,有了简洁有效的多的解法:一个DFS就搞定了。同时可以分析一下n对括号的合法表达式有多少种?F(n)=∑n−1k=0F(k)∗F(n−1−k)F(n) = \sum_{k=0}^{n-1}F(k)*F(n-1-k),具体思路很简单,但是闭式表达式我求不出来。def construct(n): def create(num1,num2,exp):原创 2016-08-08 23:16:51 · 1626 阅读 · 0 评论 -
Python技巧(6):cookbook学习笔记
(1)想要让一个匿名函数在定义时捕获变量(1)想要让一个匿名函数在定义时捕获变量可以采取传递默认参数的方式来绑定变量x = 1f = lambda y,x=x:x+yprint(f(1))x = 2print(f(1))创建一个函数集合的时候可能会这样写:funcs = {n:lambda x: x+n for n in range(5)}发现n是不能被绑定在函数体里面的,正确的姿势是:fu原创 2016-10-13 16:02:02 · 401 阅读 · 0 评论 -
python技巧(3)--python cookbook学习笔记
(1)命名切片(1)命名切片:通过切片命名我们可以避免硬编码,使得代码的可读性更好:Price = slice(3,5)#用来获取价格部分的切片price = items[Price]可以通过.indices方法可以适当的缩小边界避免越界:(2)Counter和most_common(2)Counter和most\_commonword_count其实就是将每一个元素映射到一个字典上,然后most原创 2016-09-30 12:29:01 · 649 阅读 · 0 评论 -
简单五子棋AI
五子棋AI这个项目参考了网上的五子棋源码,并且做出了自己的修改与一定的优化。基本思路:首先我们知道棋类AI的基本框架就是博弈树,使用最大最小搜索算法和alpha/beta剪枝。这是基本的框架。然后因为存在的解太多,所以我们需要考虑一个评估函数来进行选择。[1]评估:这里主要采用状态分析的办法来进行打分。我们首先统计所有的棋形状态(冲二,冲三,活三等等),然后根据双方的状态来打分:具体来说,就是轮到我原创 2017-02-23 18:16:47 · 1330 阅读 · 0 评论 -
Python导入mysql
要在python中使用mysql首先要安装支持python的mysql驱动,所以用pip下载处理一点问题,于是解决方案如下:解决办法:1、从官方下载最新的源码包下载地址:https://pypi.python.org/pypi/mysql-connector-python-rf/2.1.32、从cmd进入解压好的安装包目录中3、使用python setup.py build4、使用python se原创 2016-03-24 18:18:51 · 4295 阅读 · 1 评论 -
Python练习(2):递归解决汉诺塔问题
有三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,要把所有盘子一个一个移动到柱子B上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方,请问至少需要多少次移动,设移动次数为H(n)。求H[n],当然,这个问题还有非递归实现,有时间再去探究.def move(n, a, b, c): if(n==1): print(a,' --> ',原创 2016-03-01 20:45:34 · 1598 阅读 · 0 评论 -
A*求15码
import osimport timefrom functools import reduceN = 16T = [4,7,8,3,6,13,15,2,1,11,5,12,0,14,10,9]#T = [1,2,3,4,5,0,7,8,9,6,10,12,13,14,11,15]#obj = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0]#obj =原创 2016-03-04 23:05:26 · 497 阅读 · 0 评论