defedit_distance(a, b): la = len(a) lb = len(b) dp = [[0for i in xrange(lb + 1)] for j in xrange(la + 1)] for i in xrange(1, la + 1): dp[i][0] = i for j in xrange(1, lb + 1): dp[0][j] = j for i in xrange(la): for j in xrange(lb): if a[i] == b[j]: dp[i + 1][j + 1] = dp[i][j] else: dp[i + 1][j + 1] = min(dp[i + 1][j], dp[i][j + 1], dp[i][j]) + 1 return dp[la][lb]
from collections import defaultdict defget_divisors(n): divisors = defaultdict(int) if n % 2 == 0: while n % 2 == 0: divisors[2] += 1 n /= 2 i = 3 while i * i <= n: if n % i == 0: while n % i == 0: divisors[i] += 1 n /= i i += 2 if n > 1: divisors[n] += 1 return divisors
有了这个方法就可以用来求一些数的最小公倍数,例如求,2 3 5 8 的最小公倍数
1 2 3 4 5 6 7 8 9 10
L = [2, 3, 5, 8] factors = defaultdict(int) for i in L: divisors = get_divisors(i) for d in divisors.iterkeys(): factors[d] = max(factors[d], divisors[d]) res = 1 for d in factors.iterkeys(): res *= d ** factors[d] print res
#coding:utf-8 from collections import defaultdict import codecs from math import log
classTrie(object): classTrieNode(): def__init__(self): self.value = 0 self.trans = {} def__init__(self): self.root = self.TrieNode() defadd(self, word, value=1): cur = self.root for ch in word: try: cur = cur.trans[ch] except: cur.trans[ch] = self.TrieNode() cur = cur.trans[ch] cur.value = value def_walk(self, node, ch): if ch in node.trans: node = node.trans[ch] return node, node.value else: returnNone, 0 defmatch_all(self, s): ret = [] cur = self.root for ch in s: cur, value = self._walk(cur, ch) ifnot cur: break if value: ret.append(value) return ret
from pagedown.widgets import AdminPagedownWidget from django import forms from blog.models import Post
classPostForm(forms.ModelForm): content = forms.CharField(widget=AdminPagedownWidget()) classMeta: model = Post
这里是将content字段设置为markdown编辑,之后在admin.py中添加如下内容:
1 2 3 4 5 6
from django.contrib import admin from blog.models import Post from blog.forms import PostForm class PostAdmin(admin.ModelAdmin): form = PostForm admin.site.register(Post, PostAdmin)
defpone(p, u): c = 0 for x in xrange(2, int(sqrt(p)) + 1): if p % x == 0and x + p / x < u: c += 1 return c >= 2
defsone(s, u): for x in xrange(2, s / 2): y = s - x ifnot pone(x * y, u): returnFalse returnTrue
defptwo(p, u): c = 0 for x in xrange(2, int(sqrt(p)) + 1): if p % x == 0and x + p / x < u: y = p / x if sone(x + y, u): c += 1 return c == 1 defstwo(s, u): c = 0 for x in xrange(2, s / 2): y = s - x if ptwo(x * y, u): c += 1 return c == 1
if __name__ == "__main__": u = 100 for x in xrange(2, u / 2): for y in xrange(x + 1, u - x): p = x * y s = x + y if pone(p, u) and sone(s, u) and ptwo(p, u) and stwo(s, u): print"x:%d, y:%d, p:%d, s:%d " % (x, y, p, s)