Advertisement
mixster

Life of Py

Dec 13th, 2015
414
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.96 KB | None | 0 0
  1. import random
  2.  
  3. random.seed()
  4.  
  5. job_states = {
  6.     1: 'unemployed',
  7.     2: 'employed'
  8.     }
  9.  
  10. job_transitions = {
  11.     1: (1, 1, 2, 10, 'Found a job!'),
  12.     2: (2, 2, 1, -25, 'Fired from job.'),
  13.     3: (3, 2, 2, 2, 'Did some work.'),
  14.     4: (4, 1, 1, -2, 'Didn''t find a job.')
  15.     }
  16.  
  17. job_enums = {
  18.         'HIRED': 1,
  19.         'FIRED': 2,
  20.         'WORK': 3,
  21.         'NOJOB': 4
  22.     }
  23.  
  24. class Manager:
  25.  
  26.  
  27.     def __init__(self, states, transitions):
  28.         self.states = states
  29.         self.transitions = transitions
  30.         self.map = {}
  31.         for (uid, initial, a, b, c) in self.transitions.values():
  32.             if initial not in self.map:
  33.                 self.map[initial] = []
  34.             self.map[initial].append(uid)
  35.         self.modifiers = {
  36.             job_enums['WORK']: lambda x: 4,
  37.             job_enums['NOJOB']: lambda x: 2,
  38.             job_enums['HIRED']: lambda x: 1,
  39.             job_enums['FIRED']: lambda x: 1
  40.             }
  41.  
  42.  
  43.     def get_actions(self, age):
  44.         actions = []
  45.         for state in self.states:
  46.             if state in self.map:
  47.                 for transition in self.map[state]:
  48.                     if transition in self.modifiers:
  49.                         actions.append([transition, self.modifiers[transition](age)])
  50.                     else:
  51.                         actions.append([transition, 1])
  52.         return actions
  53.  
  54.  
  55.     def process_action(self, transition):
  56.         if transition in self.transitions:
  57.             (uid, initial, final, a, b) = self.transitions[transition]
  58.             if initial in self.states:
  59.                 self.states.remove(initial)
  60.                 self.states.append(final)
  61.  
  62.  
  63.  
  64. def get_states_text(states, lookup):
  65.     states_text = []
  66.    
  67.     for state in states:
  68.         if state in lookup:
  69.             states_text.append(lookup[state])
  70.  
  71.     return states_text
  72.  
  73.  
  74. def get_action_text(transition, lookup):
  75.     if transition in lookup:
  76.         return lookup[transition][4]
  77.     return ''
  78.  
  79.  
  80. job_manager = Manager([1], job_transitions)
  81.  
  82. managers = [job_manager]
  83. transitions = [job_transitions]
  84. master_transitions = {}
  85. for transition_dict in transitions:
  86.     master_transitions.update(transition_dict)
  87.  
  88. run = True
  89. while run:
  90.     actions = []
  91.     for manager in managers:
  92.         actions.extend(manager.get_actions(0))
  93.  
  94.     counter = 0
  95.     for action in actions:
  96.         counter += action[1]
  97.  
  98.     random_counter = random.randint(1, counter)
  99.     random_action = None
  100.     for action in actions:
  101.         random_counter -= action[1]
  102.         if random_counter <= 0:
  103.             random_action = action[0]
  104.             break
  105.    
  106.     for manager in managers:
  107.         manager.process_action(random_action)
  108.  
  109.     print(get_action_text(random_action, master_transitions))
  110.     while True:
  111.         user_input = input('Enter c to continue or q to quit:')
  112.         if user_input == "c":
  113.             break
  114.         if user_input == "q":
  115.             run = False
  116.             break
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement