The best input is OUTPUT.

2015-02-13
自动登录小木虫并获取每日金币的Python脚本

前段时间用urllib, urllib2, cookielib实现了自动登录校园网的脚本,类似发送请求的原理同样可以用在小木虫等类似的这种用PHP+MySQL实现的discuz论坛上面。于是就动手开始写了。
写这个脚本的最初目的是懒得每天手动到小木虫网站上点击领取金币了,而且我这种经常忘记这种事情,等要用到金币的时候就后悔莫及了,那干脆用python写一个开机自动领取金币的脚本更省事。
对了这个脚本实际上是上个登录校园网的一个分支,也就是LoggerBase的一个子类,一开始采用OO的方式果然是对的。。。
看了下小木虫的领取金币的页面的代码,获取小木虫金币的方式是通过POST方式向http://emuch.net/bbs/memcp.php?action=getcredit传表单信息。于是原理就可以是通过python向这个页面发送表单信息达到自动领取金币的效果。

Read More

2015-02-12
动力学模型代码的整体组织框架

这个动力学模型大概是在放假前一两个星期开始写的,由于我写代码的低效,今天才刚刚完成了model中的load()的部分,其中包括解析setup file中的基元反应的反应方程式以及检测方程式质量守恒以及吸附位守恒等主要功能。在这里大概记录下写这个模型的大致过程,以便以后回来方便浏览和回想思路。
首先是整个代码的组织框架,这个当时想了一段时间大概要怎么组织整个模型,这个还是很重要的。因为看过经典的《C Premier Plus》上面有写道:

随着程序的变得更长更复杂,头脑中的想象就开始无能为力了,而且错误也将变得难以发现。最终,那些忽略计划步骤的人会浪费大量时间并带来混乱的挫折,因为他们编写出了难看、功能不正常而且艰深难懂的程序。工作越来越复杂,需要的计划工作量就越大。

这里有一句忠告,那就是应该养成在编写代码前进行规划的习惯。使用古老而可敬的笔记技术来大略记录下程序的目标,并购了出设计的样貌。如果您这样做了,最终会节省时间并感到满意。

这学期通过上课之余的其他时间,零零碎碎的把CatMap的90%的代码看过了,大概抓住了整个模型的BIG PICTURE.由于CatMap模型的目的是进行催化剂的筛选,主要是利用BEP关系分析原始的DFT计算出的能量进行简单粗暴的线性拟合,拟合出基于两个descriptors的map,从而对于map上的每一个点进行动力学稳态求解,输出的变量主要包括coverage, rate等。对于动力学模型的学习我还是主要以了解和学习为目的的。总览这个代码,catmap充分利用了Python OO的特性把动力学模型的几个组成部分有机的组合在了一起,这是很好的,非常有利于今后的代码维护和功能的增加。在看代码的过程中,catmap给我的印象就是它过度的修改了python的内置方法,例如__getattr__(), __getattribute__(), __setattr__()等,这样做的目的我觉得作者是想给model这个类至高无上的”权利”, 修改前面的内置方法主要是在ModelWrapper类中,而这个ModekWrapper类是其他”工具”类的父类,在ModelWrapper类中修改了__getattr__(), __getattribute__(), __setattr__()等方法,使得其他”工具”类的属性都附给model使其成为model的属性。

Read More

2015-02-10
What does if __name__ == '__main__' do ?

在python经常能看到if __name__ == '__main__: '这一判断句,而且双下划线就意味着是内置的变量。那这句话到底有什么作用?去stackoverflow上搜了下看到一个不错的回答[python - What does if __name__ == "__main__": do? - Stack Overflow],这个判断句的作用也就了解了。
我大致的理解:
当python的解释器读取一个源文件的时候,解释器会在真正执行代码之前把文件中的代码执行一遍。在这个过程中,解释器会定义一些特殊的内部变量。例如,解释器直接运行该代码的时候会定义变量__name__,并把值'__main__'赋给它;相反,如果,这个代码正在被另一个python程序import的时候,那么解释器就会把__name__这个变量的值赋成代码文件本身的名字’‘(代码文件名为: .py)。

Read More

2015-02-10
利用PyUnit framework写单元测试

以前写代码没有意识到单元测试的重要性。直到project的规模慢慢变大的时候,或者当把程序给别人使用抛出exception,自己着急要解决问题的时候才意识到提前写好unit test是很重要的(我理解的对么??)。于是慢慢的我也开始写unit test了。今天就看了下python的document上面介绍PyUnit的部分,简单的学习了一下利用PyUnit写单元测试脚本。
关于unit test,

在计算机编程中,单元测试(又称为模块测试, Unit Testing)是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。在过程化编程中,一个单元就是单个程序、函数、过程等;对于面向对象编程,最小单元就是方法,包括基类(超类)、抽象类、或者派生类(子类)中的方法。

通常来说,程序员每修改一次程序就会进行最少一次单元测试,在编写程序的过程中前后很可能要进行多次单元测试,以证实程序达到软件规格书要求的工作目标,没有程序错误;虽然单元测试不是什么必须的,但也不坏,这牵涉到项目管理的政策决定。

Read More

2015-02-08
自动登陆华理校园网的python脚本

前段时间实验室的校园网总是被挤掉,虽然没用python写过爬虫,但是这也是契机来学习一下标准库里的urllib, urllib2, cookielib等这些类似的Lib.于是就着手开始写了个自动检测网络连接,并自动连接校园网的python脚本(loggers|GitHub),便于以后进行扩 展,分别写了两个类, 一个class LoggerBase, 一个子类class EcustLogger(LoggerBase)其中的代码风格模仿了这学期看的一个叫CatMap|GitHubMicro Kinetic Model的风格,从其中学习了利用字典数据类型进行脚本日志的生成等, 例如
日志记录

1
2
3
4
5
6
7
8
9
def log(self, event, **kwargs):
"append log info into log file"
file_obj = open(self.log_file,'a')
#append new log infomation
message_template = Template(self._log_str[event])
message = message_template.substitute(kwargs)
append_ctnt = self._log_format % (message, '['+time.ctime()+']')
file_obj.write(append_ctnt)
file_obj.close()
Read More

2015-02-08
Hello World

这是我的博客新家,在这里和大家分享自己的学习过程中的经验和见解(ง •̀_•́)ง

–PytLab

Read More