from turtle import * import random def doSpiral(p, lens): for n in lens: p.left(90) p.forward(n) def moreFib(): fib.append(fib[-2] + fib[-1]) def ds(p, ds, a): for d in ds: p.left(a) p.forward(d) def home(p): p.up() p.goto(400,-400) p.down() def pr(x,n=10): return map(lambda y: pow(x,y), range(n)) def spr(x,s,n=10): return map(lambda q: q*s, pr(x,n)) def jump(p, x=0, y=0): p.up() p.goto(x,y) p.down() def fskip(p, d): p.forward(d/3) p.up() p.forward(d/3) p.down() p.forward(d/3) def dsk(p, ds, a): for d in ds: p.left(a) fskip(p, d) def sdkf(p, ds, a, fwd): for d in ds: p.left(a) fwd(p, d) def tskip(p, d): p.forward(d/10) p.up() p.forward(8*d/10) p.down() p.forward(d/10) def turnto(turtle, angle): turtle._angle = angle def together(fn): for p in pens: fn(p) def fd(dist): return lambda x: x.forward(dist) def lt(ang): return lambda p: p.left(ang) def hm(): return lambda p: p.goto(0,0) def randomHeading(): return lambda p: turnto(p,random.random()*360) def tmap(fn): map(fn, pens) def u(): return lambda p: p.up() def d(): return lambda p: p.down() def distance(t1,t2): return reduce(hypot, map(lambda x,y: x-y, t1._position, t2._position)) def nearest(p, ignore=30): n = pens[0] if p == pens[0]: n = pens[1] d = distance(p, n) for c in pens[1:]: if c != p: cd = distance(p,c) if cd < d and cd > ignore: n = c d = cd return n def printDistances(): for i in range(len(pens)): print i, ": ", for j in range(i): print "%3i" % round(distance(pens[i],pens[j])), print def findClosestTo(ti): def findClosestTo1(res, ci): if ci != ti and distance(pens[ti],pens[ci]) < distance(pens[ti],pens[res]): res = ci return res return reduce(findClosestTo1, range(len(pens)), 0) def date(): os.system("date") def setUp(): "Call this function to set up a window, a canvas, and ten new turtles." global turtleRoot global turtleCanvas turtleRoot = Tkinter.Tk() turtleCanvas = Tkinter.Canvas(turtleRoot, background="blue") turtleCanvas.pack(expand=1, fill="both") global pens for i in range(10): pens.append(RawPen(turtleCanvas)) turtleNames = ["Molly", "Monica", "Charlie", "Taneesha", "Amy", "Kate", "Brendan", "Liam", "Joe", "George"] for i in range(len(pens)): pens[i].name = "%s (%d)" % (turtleNames[i], i) def angleToward(pos, targetPos): v = map(lambda x,y: x - y, targetPos, pos) return atan2(-v[1], v[0]) * 180 / pi def turnToward(p, p2): turnto(p, angleToward(p._position, p2._position)) def goToward(p, p2, d=10): turnToward(p, p2) p.forward(d) def randomPos(xscale, yscale=-1, xoffset=0, yoffset=0): if yscale==-1: yscale = xscale return lambda p: jump(p,random.random()*xscale-xoffset,random.random()*yscale-yoffset) def c(color): return lambda p: p.color(color) def scatter(p):