分类目录归档:Python

各种排序算法(Python实现)

2011 年 5 月 19 日

Python实现的快速排序,二路并归排序,冒泡排序,选择排序 继续阅读

  |  阅读(593次)

图书馆自动续借系统

2011 年 4 月 18 日

不得不说,春日的杭州真的不是一般的漂亮,自己在杭州呆了两年也从未有过这种感觉。Linux不争气的挂掉,直接导致很多事情没法做,不过忍受每天N次的网络掉线也不是什么开心的事情。手头几个项目都接近尾声,虽然有很多的不开心,但还是坚持做下去了,真的只要认真付出就总有收获。扯的远了,进入今天的正题——图书馆自动续借系统。 功能: 自动续借快过期的图书。 无法继续续借的会发送Email提醒。 已超期图书提醒。 使用: 修改setting.py.example,设置好邮箱的SMTP地址和帐号密码,使用前将setting.py.example 改名为 setting.py。 通过command.py将待监测用户加入数据库。 同过windows的任务计划或者linux的crontab定时执行,每天一次即可。 command.py使用说明: 增加新监测用户 python command.py add -u 学号 -p 图书馆登录密码 -e Email 将用户从数据库中删除 python command.py del -u 学号 虽然只试过自己学校的系统,不过理论上支持所有的OPAC V4.5系统。贴一部分核心的代码:

发表在 Python 标签为 , ,
  |  阅读(223次)

2011-1-16 Update:增加了基于隐式唯一法的检测,可以解的数独更多,第二个数独还是没解出来啊。。。 2011-1-27 Update:完善算法,能够进行尝试,失败后自动回滚直到解除答案为止 好吧,我承认我无聊了,给自己不想自习找个借口,昨天看到Google Goggles能拍照解数独,很是诧异,忽然意识到这个极费脑力的游戏确实可以交给电脑去做,于是乎诞生了写一个解数独的算法。 目前的算法是基于逻辑推理法和穷举法结合的方法,先尝试用逻辑方法解题,无法解决的时候会尝试填一个数字,再使用逻辑方法,依次直到解出正确答案为止。这样有一个很明显的好处就是能够避免穷举,毕竟逻辑推理的方法效率要高很多。 逻辑推理方法实现的算法比较简单,只有比较常用的基于候选数的显式唯一法和隐式唯一法。每个待填的格子中所有可能填入的数称为候选数。 当某个单元格的候选数的个数只有一个的时候,这个格子的数就是确定的,这个就称为显式唯一法。在某一行所有待填格子的候选数的集合中,如果某个数字在所有数字中只出现了一次,那个这个数字的位置也是唯一确定的,因为这行的其他单元格都不可能填入这个数字,这个就叫隐式唯一法。大部分的简单数独问题都可以用这两种方法交替解决。 当用简单的逻辑法无法解决时,我们就保存当前数独的状态,然后从可能的候选数中抽出一个填入,再利用逻辑法解题,如果发生错误就回滚到上一个状态,并从候选数中删除该数字,继续尝试下一种可能,如果没有错误但题目仍然没有解决,就继续抽出一个可能的候选数填入,以此类推,直到解决题目为止。这个过程用一个堆栈实现。

发表在 Python 标签为 , ,
  |  阅读(810次)

对列表(list)进行排序 推荐的排序方式是使用内建的sort()方法,速度最快而且属于稳定排序 1 2 3 4 5 6 7 8 9 10 11 >>> a = [1,9,3,7,2,0,5] >>> a.sort() >>> print a [0, 1, 2, 3, 5, 7, 9] >>> a.sort(reverse=True) >>> print a [9, 7, 5, 3, 2, 1, … 继续阅读

发表在 Python 标签为 , , ,
  |  阅读(528次)

Python中zip()函数用法举例

2010 年 12 月 4 日

定义:zip([iterable, ...]) zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表)。若传入参数的长度不等,则返回list的长度和参数中长度最短的对象相同。利用*号操作符,可以将list unzip(解压),看下面的例子就明白了: 1 2 3 4 5 6 7 8 9 >>> a = [1,2,3] >>> b = [4,5,6] >>> c = [4,5,6,7,8] >>> zipped = zip(a,b) [(1, 4), (2, 5), (3, 6)] >>> zip(a,c) [(1, 4), (2, … 继续阅读

发表在 Python 标签为 , ,
  |  阅读(2,139次)

python的enumerate函数

2010 年 11 月 9 日

这个是python的一个内建函数,看书的时候发现了他,mark一下 当我们既需要遍历索引同时需要遍历元素的时候,可以考虑使用enumerate函数,enumerate函数接受一个可遍历的对象,如列表、字符串 比如我们有一个["one","two","there"]的列表,我们需要在列表的每个元素前面加上他的编号 1 2 3 4 5 6 7 8 i = 0 seq = ["one","two","three"] for element in seq: seq[i] = ‘%d: %s’ % (i, seq[i]) i += 1 print seq   [’0: one’, ’1: two’, ’2: three’]

发表在 Python 标签为 , ,
  |  阅读(264次)

关于Python中的yield

2010 年 10 月 23 日

在介绍yield前有必要先说明下Python中的迭代器(iterator)和生成器(constructor)。 一、迭代器(iterator) 在Python中,for循环可以用于Python中的任何类型,包括列表、元祖等等,实际上,for循环可用于任何“可迭代对象”,这其实就是迭代器 迭代器是一个实现了迭代器协议的对象,Python中的迭代器协议就是有next方法的对象会前进到下一结果,而在一系列结果的末尾是,则会引发StopIteration。任何这类的对象在Python中都可以用for循环或其他遍历工具迭代,迭代工具内部会在每次迭代时调用next方法,并且捕捉StopIteration异常来确定何时离开。 使用迭代器一个显而易见的好处就是:每次只从对象中读取一条数据,不会造成内存的过大开销。 比如要逐行读取一个文件的内容,利用readlines()方法,我们可以这么写: 1 2 for line in open("test.txt").readlines(): print line 这样虽然可以工作,但不是最好的方法。因为他实际上是把文件一次加载到内存中,然后逐行打印。当文件很大时,这个方法的内存开销就很大了。 利用file的迭代器,我们可以这样写: 1 2 for line in open("test.txt"): #use file iterators print line 这是最简单也是运行速度最快的写法,他并没显式的读取文件,而是利用迭代器每次读取下一行。

发表在 Python 标签为 , , ,
  |  阅读(834次)
Page 1 of 212