<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def __AddWorkers(self, num_to_add):
 """ Adds workers evenly across all enabled zones."""
                
    # Check preconditions
    assert(self.__IsWebUiReady())
    zone_to_ips = self.__GetZoneToWorkerIpsTable()    
    zone_old_new = []
    for zone, ips in zone_to_ips.iteritems():
      num_nodes_in_zone = len(ips) 
      num_nodes_to_add = 0
      zone_old_new.append((zone, num_nodes_in_zone, num_nodes_to_add))    
    print 'num_to_add %s' % num_to_add
    for _ in range(num_to_add):
      zone_old_new.sort(key= lambda z : z[1]+z[2])
      zt = zone_old_new[0]
      zone_old_new[0] = (zt[0], zt[1], zt[2]+1)
    #print zone_old_new
    zone_plan = [(zt[2], zt[0]) for zt in zone_old_new]
    print 'resize plan'
    if self.config.workers_on_spot_instances:
      new_worker_instances = self.__LaunchSpotWorkerInstances(zone_plan)
    else:  
      new_worker_instances = self.__LaunchOnDemandWorkerInstances(zone_plan)
    self.__WaitForInstancesReachable(new_worker_instances)
    self.__ConfigureWorkers(new_worker_instances)
    return