Traducir entre la lista de TCL y Python -- python campo con tcl camp codereview Relacionados El problema

Translate between Tcl and Python List


2
vote

problema

Español

Quiero saber si el siguiente analizador cubre todos los casos posibles, y si el código puede estar limpio / mejor organizado.

Código PYTHON 3:

  def add_element(cache, element):     if element != '':         cache[-1].append(element)     return ''   def to_py(raw_tcl_list):     out = []     cache = [out]     element = ''     escape = False     for char in raw_tcl_list:         if escape:             if char not in ["\", "{", "}", "[", "]", "$"]:                 raise ValueError("Incorrect escape character %s" % char)             element += char             escape = False         elif char == "\":             escape = True         elif char in [" ", " ", " ", " "]:             element = add_element(cache, element)          elif char == "{":             a = []             cache[-1].append(a)             cache.append(a)          elif char == "}":             element = add_element(cache, element)             if len(cache) < 2:                 raise ValueError("Close bracket without opening bracket.")              cache.pop()         else:             element += char     if len(cache) != 1:         raise ValueError("Mismatched brackets.")     return out[0]   def to_tcl(py_list):     if type(py_list) == list:         out_str = "{ "         for item in py_list:             out_str += to_tcl(item)         out_str += "} "         return out_str     else:         out_str = str(py_list) + " "         for c in ["\", "{", "}", "[", "]", "$"]:             out_str = out_str.replace(c, "\" + c)         return out_str   import pprint  x = "{ 12 apple {100} {} {{12 34}}   {56  { \{78 {11 12 11} 10}}}" y = to_py(x) z = to_tcl(y) print("# Original #") pprint.pprint(x) print(" # Translated to Python List #") pprint.pprint(y) print(" # Translat back to Tcl List #") print(z)   

Salida:

  object CollatzSeq {    // Using Array As Performance Is Better Than Map   private final val collatzSeq = Array.fill[BigInt](5* 1000 * 1000)(0)   def longestCollatzSeq(n: BigInt): BigInt = {     def longestCollatzSeqHelper(n: BigInt, count: BigInt = 0): BigInt = {       val countOfN = collatzSeq((n - 1).toInt)       n match {         case n if n == 1 => count         case _ if countOfN != 0 =>           count + countOfN         case n if n % 2 == 0 =>           val updateForEven = longestCollatzSeqHelper(n/2, count + 1)           collatzSeq.update((n-1).toInt, updateForEven - count)           updateForEven         case n if n % 2 != 0 =>           val updateForOdd = longestCollatzSeqHelper(3 * n + 1 , count + 1)           collatzSeq.update((n-1).toInt, updateForOdd - count)           updateForOdd       }     }     longestCollatzSeqHelper(n)   } } 0  

Lista de los caracteres especiales de TCL: http://wiki.tcl.tk/989#pagetoceaa9fda9

Original en ingles

I want to know if the following parser covers every possible cases, and if the code can be cleaner/better organized.

Python 3 code:

def add_element(cache, element):     if element != '':         cache[-1].append(element)     return ''   def to_py(raw_tcl_list):     out = []     cache = [out]     element = ''     escape = False     for char in raw_tcl_list:         if escape:             if char not in ["\\", "{", "}", "[", "]", "$"]:                 raise ValueError("Incorrect escape character %s" % char)             element += char             escape = False         elif char == "\\":             escape = True         elif char in [" ", "\t", "\r", "\n"]:             element = add_element(cache, element)          elif char == "{":             a = []             cache[-1].append(a)             cache.append(a)          elif char == "}":             element = add_element(cache, element)             if len(cache) < 2:                 raise ValueError("Close bracket without opening bracket.")              cache.pop()         else:             element += char     if len(cache) != 1:         raise ValueError("Mismatched brackets.")     return out[0]   def to_tcl(py_list):     if type(py_list) == list:         out_str = "{ "         for item in py_list:             out_str += to_tcl(item)         out_str += "} "         return out_str     else:         out_str = str(py_list) + " "         for c in ["\\", "{", "}", "[", "]", "$"]:             out_str = out_str.replace(c, "\\" + c)         return out_str   import pprint  x = "{ 12 apple {100} {} {{12 34}} \n {56\n { \\{78 {11 12 11} 10}}}" y = to_py(x) z = to_tcl(y) print("# Original #") pprint.pprint(x) print("\n# Translated to Python List #") pprint.pprint(y) print("\n# Translat back to Tcl List #") print(z) 

Output:

# Original # '{ 12 apple {100} {} {{12 34}} \n {56\n { \\{78 {11 12 11} 10}}}'  # Translated to Python List # ['12',  'apple',  ['100'],  [],  [['12', '34']],  ['56', ['{78', ['11', '12', '11'], '10']]]  # Translat back to Tcl List # { 12 apple { 100 } { } { { 12 34 } } { 56 { \{78 { 11 12 11 } 10 } } }  

list of Tcl special characters: http://wiki.tcl.tk/989#pagetoceaa9fda9

     

Lista de respuestas


Relacionados problema

2  Traducir entre la lista de TCL y Python  ( Translate between tcl and python list ) 
Quiero saber si el siguiente analizador cubre todos los casos posibles, y si el código puede estar limpio / mejor organizado. Código PYTHON 3: def add_el...

2  Un reloj y una fortuna: un reloj de pantalla completa con cotizaciones al azar en TCL / TK  ( A clock and a fortune a full screen clock with random quotes in tcl tk ) 
He escrito un pequeño script TCL / TK para un amigo que muestra la hora actual, así como una cotización. Lo usa en algún proyecto con un PI de Raspberry, y co...

2  Espere la secuencia de comandos que pruebe si se configura una conexión sin contraseña  ( Expect script that tests if a passwordless connection is setup ) 
He escrito un simple script para decirme si se configura una conexión sin contraseña. public class DownloadScheduleTask extends AsyncTask<String, Void, Voi...

4  Idea de lazo TCL: for_index_item  ( Tcl loop idea for index item ) 
A menudo necesito bucle a través de una lista de elementos y necesito tanto la posición del índice como el elemento en sí: tkinter2 Salida: tkinter3...

5  Cálculo de las posiciones a lo largo de los bordes de un rectángulo  ( Calculating positions along the edges of a rectangle ) 
Tuve los siguientes tres procedimientos TCL, que calculan posiciones a lo largo de tres bordes de un rectángulo: #---- Numbered pins at the top -----------...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos