download wallpapers from interfacelift.com

in Python. Customize the 'wait' and 'resolution' variables to satisfy your needs.

Read more

阶乘和排列组合

代码如下:

Read more

python 检测变量类型

如题。

Read more

一个发送带附件email的python脚本

从python.org上抄的。 

Read more

穷举4阶幻方

思路:

  1. 对于第一行的第1个元素,是1~16;第2个要选此之外的,只有15个可选。第三个只有14个可选。第四个,只有一个选择,即平均数减去1,2,3。
  2. 第2,3行的最后一个同理。
  3. 第4行每一个元素均由其同列元素决定。
  4. 这些“被决定”的值不得小于0,以免出现负数。�除

代码:

Read more

穷举3阶幻方

最笨的办法,一一枚举。

Read more

python语言扑克发牌

代码:

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#latest edit: 2009.06.19 
 
#to ensure the utf8 encoding environment
import sys
import random

default_encoding = 'utf-8'
if sys.getdefaultencoding() != default_encoding:
    reload(sys)
    sys.setdefaultencoding(default_encoding)


n=52
def gen_pocker(n):
    list=range(n)   #	the source list
    pocker=[0 for i in range(n)]    #the target list
    x=n
    while(x>0):
        x=x-1
        p=random.randint(0,x)
        pocker[x]=list[p]
        del list[p]
    return pocker

def getColor(x):
    color=["黑桃","红桃","草花","方块"]
    c=int(x/13)
    if c<0 or c>=4:
        return "ERROR!"
    return color[c]


def getValue(x):
    value=x % 13
    if value==0:
        return 'A'
    elif value>=1 and value<=9:
        return str(value+1)
    elif value==10:
        return 'J'
    elif value==11:
        return 'Q'
    elif value==12:
        return 'K'

def getPuk(x):
    return getColor(x)+getValue(x)

(a,b,c,d)=([],[],[],[])

pocker=gen_pocker(n)

for x in range(13):
    m=x*4
    a.append(getPuk(pocker[m]))
    b.append(getPuk(pocker[m+1]))
    c.append(getPuk(pocker[m+2]))
    d.append(getPuk(pocker[m+3]))
a.sort()
b.sort()
c.sort()
d.sort()
for x in a:
    print x
print     ""
for x in b:
    print x
print     ""    
for x in c:
    print x
print     ""    
for x in d:
    print x

 

 

生成的一组牌为:

方块J
方块K
红桃5
红桃6
红桃J
草花4
草花9
草花J
草花K
黑桃2
黑桃8
黑桃9
黑桃K

方块10
方块2
方块3
方块7
方块8
方块9
方块Q
红桃7
红桃8
红桃9
草花6
草花Q
黑桃3

方块4
方块6
红桃10
红桃2
红桃4
红桃Q
草花10
草花3
黑桃10
黑桃7
黑桃A
黑桃J
黑桃Q

方块5
方块A
红桃3
红桃A
红桃K
草花2
草花5
草花7
草花8
草花A
黑桃4
黑桃5
黑桃6

twitter同步到sina

下面的代码可将twitter同步到sina微博。不过,还不能移植到GAE.

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-

#to ensure the utf8 encoding environment
import sys
default_encoding = 'utf-8'
if sys.getdefaultencoding() != default_encoding:
	reload(sys)
	sys.setdefaultencoding(default_encoding)

import urllib
import urllib2,cookielib

class Twitter(db.Model):
	id=db.StringProperty()

def send_sina_msgs(username,password,msgs):
    

    cj = cookielib.CookieJar()

    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))

    urllib2.install_opener(opener)





    data = 'username=%s&password=%s&returntype=TEXT'%(username,password)
    

    request = urllib2.Request(

            url     = 'https://login.sina.com.cn/sso/login.php',

            data    = data)



    ret = opener.open(request)

    #content = ret.read()


    for msg in msgs:        

        data = 'content=%s'%(msg)

        request = urllib2.Request(

                url     = 'http://t.sina.com.cn/mblog/publish.php',

                headers = {'Referer':'http://t.sina.com.cn'},

                data    = data)

        ret = opener.open(request)
        #content = ret.read()
        #print content

 

 

 

 

 

 

紫龙书2.6习题

  1. 可忽略如下格式的注释//、#、/*...*/。但是如果在字串中,则无法忽略。如("../*..*/ # //")。
  2. 可识别<,<=,==,!=,>=,>。
  3. 可识别浮点数,格式如:9.22323,.323,22323.33,等等。
#!/bin/env python
# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
#rex
#2009.08.22.

#不使用正则表达式,自定义下面三个函数,分别判断是否数字/字母,或者二者之一。
def isDigit(d):
    if d>=0 and d<=9 and type(d)==int or d>='0' and d<='9' and type(d)==str:
        return 1
    else: return 0

def isLetter(l):
    if l>='a' and l<='z' and type(l)==str or l>='A' and l<='Z' and type(l)==str:
        return 1
    else: return 0

def isLetterOrDigit(x):
    if isDigit(x) or isLetter(x):
        return 1
    else: return 0




#比较关系
def isComparison(x):
    if x=='<' or x=='>' or x=='!':
        return 1
    else:
        return 0

#本函数接收一个字串,
#如果当前是#或//,则返回下一行的内容。

def parse_float_num(str):
    index=0
    ch=str[index]
    #print ch,str[index+1:]
    value=0
    weight=10
    while(isDigit(ch) or ch=='.'):        
        if ch=='.':
            weight=1
            index+=1
            if index>len(str)-1:break
            ch=str[index]
        elif isDigit(ch):
            if weight==10:
                value=weight*value+int(ch)
            elif weight<10:
            	weight*=0.1
                value=value+weight*int(ch)
            index+=1
            if index>len(str)-1:break
            ch=str[index]
        else: break
        
    return value

def new_line(str):
    x=0
    c=str[x]   
    if c=='#':
        #print c, str[x+1]
        while(c!='\n'):
            x+=1
            c=str[x]
        str=str[x+1:]
        return new_line(str)
    elif c=='/' and str[1]=='/':
        while(c!='\n'):
            x+=1
            c=str[x]
        str=str[x+1:]
        return new_line(str)
    elif c=='/' and str[1]=='*':
        x=2
        c=str[x]
        while c:            
            if c=='*' and str[x+1]=='/':     
                return new_line(str[x+2:])            
            x+=1
            c=str[x]
    elif c==' ' or c=='\t' or c=='\n':
        x=0
        while c==' ' or c=='\t' or c=='\n':            
            x+=1
            c=str[x]
        #print "here c:",c
        if str[x+1]:
            return new_line(str[x:])
        else:
            return ""
    else:
        return str
        

#定义基类token,以便被继承
class Token:
    tag=0
    def __init__(self,t):
        self.tag=t
    def tokenprint(self):
        print "%s"%self.tag

class Tag:
    NUM=256
    ID=257
    TRUE=258
    FALSE=259
    COMPARE=260

#继承token,定义num类.
class Num(Token):
    value=0
    def __init__(self,v):
        #注意,此处override了token的自定义.
        Token.__init__(self,Tag.NUM)
        self.value=v

    def tokenprint(self):
        #自己的输出函数.
        print self.tag,self.value
        
        

#同上.
class Word(Token):
    lexeme=""
    def __init__(self,t,s):
        Token.__init__(self,t)
        self.lexeme=s
    def tokenprint(self):
        print ("%d,%s")%(self.tag,self.lexeme)

#同上
class Lexer():
    line=1
    peek=' '
    words={}
    def printall(self):
        #打印所有的保留字、标识符。
        if len(self.words):
            for x in self.words.keys():
                m=self.words[x].tokenprint()
                #忽略其中None的内容。
                if m: print m

    def reserve(self,word):
        #之所以选python重写,是因为python里的dictionary与java程序中的Hashtable()是一家.
        self.words[word.lexeme]=word

    def __init__(self):
        self.reserve(Word(Tag.TRUE,"true"))
        self.reserve(Word(Tag.FALSE,"false"))
        self.reserve(Word(Tag.COMPARE,"=="))
        self.reserve(Word(Tag.COMPARE,">="))
        self.reserve(Word(Tag.COMPARE,"<="))
        self.reserve(Word(Tag.COMPARE,"!="))
        self.reserve(Word(Tag.COMPARE,">"))
        self.reserve(Word(Tag.COMPARE,"<"))
    def scan(self,str_line):
        buf=str_line
        index=0
        
        char=buf[index]
        while(char):
            if char==' ' or char=='\t':
                index+=1
                char=buf[index]                
            elif char=='#' or char=='/' and buf[index+1]=='/' or char=='/' and buf[index+1]=='*':                
                buf=new_line(buf[index:])
                index=0
                char=buf[index]                
            elif char=='\n':
                self.line+=self.line
                index+=1
                char=buf[index]
            else:    break
            

        #python的[]好好用呀!
        buf=buf[index:]
        if isDigit(buf[0]) or buf[0]=='.':            
            #for 也好用.
            v=parse_float_num(buf)
            v=Num(v)
            v.tokenprint()
            return  v
        if isLetter(buf[0]):
            b=""
            for x in buf:
                if isLetterOrDigit(x):
                    b+=x
                else:break

            #高级语言的特性
            if b in self.words.keys():
                return self.words[b]
            else:
                w=Word(Tag.ID,b)
                self.words[b]=w
                return w
        if isComparison(buf[0]):
            v=""
            #for 也好用.
            for x in buf:
                if isComparison(x):
                    v+=x
                else:break
            if v in self.words.keys():
                return self.words[v]
            else:
                w=Word(Tag.COMPARE,v)
                self.words[v]=w
                return w           
            
        t=Token(buf[0])
        return t



#测试  .忽略行首连续空白字符;

x=Lexer()

x.scan("    true")
x.scan("    <>")
x.scan("    /**/<")
x.scan('''    /*

*/

.123445
''')
x.printall()