新军's profileIns'PhotosBlogListsMore ![]() | Help |
|
August 08 python统计php代码的ui小工具 好久没上来写东西了,今天用python写了一个统计php代码的UI小工具。 暂时还没写支持统计目录,当前只能统计单文件。支持目录很快就会放上来 代码如下: #coding:utf-8 from Tkinter import * from FileDialog import * from SimpleDialog import * import re def loadFile(): file = LoadFileDialog(root) filepath = file.go() if filepath: count(filepath) def loadDir(): pass def count(path): f = open(path) pattern = re.compile(r'<\?php', re.IGNORECASE) pattern2 = re.compile(r'\?>',re.IGNORECASE) result = [] result2 = [] i = total = 0 for line in f: i += 1 if pattern.match(line): result.append(i) if pattern2.match(line): result2.append(i) if(len(result) != len(result2)): showMessage(u'发生错误请检查目标文档') else: for i in range(len(result)): total += result2[i] - result[i] - 1 f.close() showMessage(total) def showMessage(msg): msg = '共有:' + str(msg) + "行" SimpleDialog(root, text = msg, buttons = ['Yes']).go() root = Tk() root.title("统计PHP代码小工具") root.geometry('300x300+200+300') menubar = Menu(root) filemenu = Menu(menubar) filemenu.add_command(label = 'open file', command = loadFile) filemenu.add_command(label = 'open dir', command = loadDir) menubar.add_cascade(label = 'File',menu = filemenu) root['menu'] = menubar Label(root, text='choose the file').pack() Button(root, text='browse', command = loadFile).pack() root.mainloop() August 06 C++实现计算名次 计算名词是指所有小于本身以及左边等于本身的元素数目 初步代码如下: #include <iostream> template<class T> void Rank(T a[], int n, int r[]){ for(int i = 0; i < n; ++i){ r[i] = 0; } for(int i = 0; i < n; ++i){ for(int j = 0; j < n; j++){ if(a[j] < a[i]) ++r[i]; } for(int j = 0; j < i; ++j){ if(a[j] == a[i]) ++r[i]; } } for(int i = 0; i < n; ++i){ std::cout << r[i] << std::endl; } } 继续分析,精简步骤后的算法如下: def haha(): pass August 05 Python实现全排列算法 n = 0 def perm(list, k, m): global n if k > m: for i in range(m+1): print list[i], print '\n' n += 1 else: for i in range(k,m+1): perm(list, k+1, m) a = [1,2,3] perm(a, 0, 2) print n print a 学习全排列的时候,网上搜索到的c代码是完全的一致。我用python重写了,去掉了没有必要的内容。 完全在忽悠人拿。。。 August 02 Python算法分析算法分析五个要素: 1.算法运行时间与输入的关系 2.算法所占用或最大使用的空间 3程序代码的最大空间 4程序时候能正确的得到所期望的结果 5算法的复杂性,是否很容易阅读,修改等 6.算法的健壮性如何,是否能够处理不正确的用户输入 python程序 | |Python interpreter | 解释器 | | | Python bytecode | |Python virtual machine | bytecode interpreter | | | 机器码
基本公理: 1.假定取和委派变量都是常量 Tfetch , Tstore 如 y = x 运行时间为 Tfetch + Tstore y = 1同样运行时间也是 Tfetch + Tstore 2.假定基本运算符addition,subtraction,multiplication,division,comparison时间也是确定的常量,分别表示为T+, T-,T*,T/,T< y = x + 1 running time is :2Tfetch + T+ + Tstore 3.call一个方法,以及从一个方法中return出来也被假定为常量Tcall, Treturn
y = f(x) running time is:Tfetch + Tstore + Tcall + Tf(x) + Tstore 第一个Tfetch是取得变量x, 第二个Tstore是传递参数 第三个是call函数 第四个是函数本身 第五个是将变量委派给y 算法分析实例: def sum(n): result = 0 Tfetch + Tstore i = 1 Tfetch + Tstore while i <= n: (2Tfetch + T<) x (n + 1) 比对部分执行了n + 1 次,但是循环体执行了n次 result += i (2Tfetch + T+ + Tstore) x n i += 1 (2Tfetch + T+ + Tstore) x n return result Tfetch + Treturn Total is (6Tfetch + 2Tstore + 2T+ + T<) x n + (Treturn + 5Tfetch + 2Tstore + T<) T(n) = t1 x n + t2 其中t1= ... t2 = ...
4.索引数组元素也被认为是常量T[.] y = a[i] running time is : 3Tfetch + T[.] + Tstore Tfetch is : a, i ,a[i] Horner's rule计算多项式所用得Horner's rule,理解了好几分钟才明白.哎.数学要好好学. sum = a0x0 + a1x1 + a2x2 + a3x4 + ... + anxn def horner(a,n,x): result = a[n] i = n - 1 while i >= 0: result = result * x + a[i] i -= 1 return result Python实现冒泡算法这个算法还有待改进.写这个算法的时候一不小心又陷入了死循环,以后要小心的写递归. 代码可直接运行 def Bouble(list): August 01 Python实现顺序查找#coding:utf-8 这个算法比较简单,代码就大家自己看吧 Python实现二分查找下午对着二分查找得原理用python进行了模拟. 越来越发现,python才是数据结构和算法表示的王者,c++表示过于复杂. python的简单明了现在全部体现出来了. 代码如下: #coding:utf-8 print '共执行了',i,'次查找' 写到这,讲个小技巧,php中echo的时候不要都用"."哦.要学python的print,用","分开,效率可是杠杠的 终于全部看完Tkinter的教程已经了解了全部的Tkinter的内容,可以开始着手设计自己的UI界面的Python应用程序了. 第一个应用程序暂定为EasCMS(PHP版)的桌面应用.目前正在写接口. 第一次将PHP与Python结合起来了. 对于这个胶水语言,暂时还没有将她与C++等粘合在一起,弄完这个项目之后好好试试. 瞎扯最近一直在学习技术方面的东西,拼命的实践,写代码,积累项目经验,只是为了自己热爱的技术. 终于有一天感觉有点累了. QQ for linux终于出来了.以后可以彻底的搬家了.再也不用回到windows的下面了. 飞信linux版本的也搞到了,linux下的编程好好就是了. 是时候该休息休息了. Tkinter设置root的大小,以及相对屏幕的位置from Tkinter import * root = Tk() root.geometry('300x300+100+300') #设置宽度和高度均为300,相对于屏幕左上角的坐标位置为(+100,+300) root.mainloop() |
|
|