#format python """LacOperon symbolic simulation using [Python] --[yong27], 2005-03-27 """ import unittest, sys class LacOperon: ID = 0 isBindOperator = True isBindCap = False def __init__(self, feed): self.feed = feed self.check() self.ID = LacOperon.ID LacOperon.ID+=1 def check(self): if self.feed.lactose > 0: self.isBindOperator = False if self.feed.glucose == 0: self.isBindCap = True def update(self): if self.feed.isBottom(): raise AssertionError, "Die" if self.feed.glucose > 0: self.feed.glucose -=1 elif self.getProtein() =='lactase': self.feed.lactose -=1 self.check() def getProtein(self): if not self.isBindOperator and self.isBindCap: return "lactase" def __repr__(self): return '%i : glucose %i, lactose %i, proteins %s'%( self.ID, self.feed.glucose, self.feed.lactose, self.getProtein()) class Feed: def __init__(self, **substrates): self.glucose = substrates['glucose'] self.lactose = substrates['lactose'] def isBottom(self): return self.glucose == 0 and self.lactose == 0 class Simulator: def __init__(self): self.players = list() def addPlayer(self, player): self.players.append(player) def iterate(self, n): for each in range(n): for player in self.players: print player player.update() class FeedTest(unittest.TestCase): def testGetGlucose(self): f = Feed(glucose=10,lactose=10) self.assertEquals(10 , f.glucose) class LacOperonTest(unittest.TestCase): def testOnlyGlucose(self): lo = LacOperon(Feed(glucose=10, lactose=0)) self.assertEquals(None, lo.getProtein()) def testOnlyLactose(self): lo = LacOperon(Feed(glucose=0, lactose=10)) self.assertEquals('lactase', lo.getProtein()) def testGlucoseLactose(self): lo = LacOperon(Feed(glucose=10, lactose=10)) self.assertEquals(None, lo.getProtein()) def testUpdate(self): lo = LacOperon(Feed(glucose=2, lactose=2)) lo.update() self.assertEquals(1, lo.feed.glucose) self.assertEquals(2, lo.feed.lactose) lo.update() self.assertEquals(0, lo.feed.glucose) self.assertEquals(2, lo.feed.lactose) lo.update() self.assertEquals(0, lo.feed.glucose) self.assertEquals(1, lo.feed.lactose) lo.update() self.assertEquals(0, lo.feed.glucose) self.assertEquals(0, lo.feed.lactose) self.assertRaises(AssertionError, lo.update) def simulate(): s = Simulator() l1 = LacOperon(Feed(glucose=10, lactose=10)) l2 = LacOperon(Feed(glucose=15, lactose=5)) s.addPlayer(l1) s.addPlayer(l2) try: s.iterate(30) except AssertionError: print 'die.' sys.exit() if __name__=='__main__': #unittest.main(argv=('','-v')) simulate()