text: import time
  import random
  import threading
  
  N = int(input("\nIngrese el numero de Filosofos (se serviran tenedores igual al numero de filosofos en la mesa): "))
  
  
  class filosofo(threading.Thread):
      hilo = threading.Lock() 
      estado = [] 
      tenedores = [] 
      count=0
  
      def __init__(self):
          super().__init__()      
          self.id=filosofo.count 
          filosofo.count+=1 
          filosofo.estado.append('0') 
          filosofo.tenedores.append(threading.Semaphore(0)) 
          print("\n El filosofo No. {} está pensando".format(self.id+1))
  
      def __del__(self):
          print("\n El filosofo No. {} se paró de la mesa".format(self.id+1)) 
  
  
  
      def verificar(self,i):
          if filosofo.estado[i] == '1' and filosofo.estado[self.izquierda(i)] != '2' and filosofo.estado[self.derecha(i)] != '2':
              filosofo.estado[i]='2'
              filosofo.tenedores[i].release() 
      
      def izquierda(self,i):
          return(i+1)%N 
  
      def tomar(self):
          filosofo.hilo.acquire() 
          filosofo.estado[self.id] = '1'
          self.verificar(self.id) 
          filosofo.hilo.release() 
          filosofo.tenedores[self.id].acquire()
  
      def derecha(self,i):
          return (i-1)%N 
  
      def soltar(self):
          filosofo.hilo.acquire() 
          filosofo.estado[self.id] = '0'
          self.verificar(self.izquierda(self.id))
          self.verificar(self.derecha(self.id))
          filosofo.hilo.release() 
  
      def comer(self):
          print("\n El filosofo No. {} está comiendo".format(self.id+1))
          time.sleep(2) #TIEMPO ARBITRARIO PARA COMER
          print("\n El filosofo No. {} acabó de comer".format(self.id+1))
  
      def run(self):
          for i in range(2): # Numero de veces que los filosofos repetiran plato
              self.tomar() 
              self.comer()
              self.soltar() 
  
  def main():
      lista=[]
      for i in range(N):
          lista.append(filosofo()) 
  
      for f in lista:
          f.start() 
  
      for f in lista:
          f.join() 
  
  if __name__=="__main__":
      main()