String String String -- python campo con algorithm campo con python-2.x camp codereview Relacionados El problema

Parse path string


2
vote

problema

Español

Supongamos que la cadena de la ruta está codificada de esta manera:

  • 2t3t5: significa mover 2 pasos, gire a la derecha, mueva 3 pasos, gire a la derecha y mueva 5 pasos
  • 32T: lo que mejor lee como 3 (2T), y significa hacer la siguiente operación 3 veces = & gt; (mueva 2 pasos, gire a la derecha), si está escrito en una palabra completa, significa mover 2 pasos, gire a la derecha, mueva 2 pasos, gire a la derecha, mueva 2 pasos, gire a la derecha
  • 3 (4T2T) 5T, lo que significa que hacen 3 veces el funcionamiento de la hora (mueva 4 pasos, gire a la derecha, mueva 2 pasos, gire a la derecha), luego mueva 5 pasos y gire a la derecha

El método que quiero revisar es parse_path , y pongo algunos otros métodos simulados para el propósito de depuración solamente. Cualquier consejo para hacer que el analizador sea más confiable, más elegante / más corto y cualquier consejo de estilo de código es altamente apreciado.

  width: 2%0  
Original en ingles

Suppose path string are encoded in this way:

  • 2T3T5: means move 2 steps, turn right, move 3 steps, turn right, and move 5 steps
  • 32T: which better read as 3(2T), and it means do the following operation 3 times => (move 2 steps, turn right), if written in a complete word, it means move 2 steps, turn right, move 2 steps, turn right, move 2 steps, turn right
  • 3(4T2T)5T, which means do 3 time operation of (move 4 steps, turn right, move 2 steps, turn right), then move 5 steps and turn right

The method I want to review is parse_path, and I put some other mock methods for debug purpose only. Any advice to make parser more reliable, more elegant/shorter and any code style advice is highly appreciated.

class Movement:     def __init__(self,x,y,delta_x,delta_y):         self.x = x         self.y = y         self.delta_x = delta_x         self.delta_y = delta_y     def move(self, steps):         print 'move ', steps     def turn_right(self):         print 'turn right'     def parse_path(self, source):         #2T3T5         #32T         #3(4T2T)5T         start = 0         index = 0         while index < len(source):             if source[index] == 'T':                 steps = int(source[start:index])                 if steps >= 10:                     times = steps / 10                     steps = steps % 10                 else:                     times = 1                 for t in range(times):                     self.move(steps)                     self.turn_right()                 start = index + 1                 index += 1             elif index == len(source) - 1:                 steps = int(source[start:index+1])                 if steps >= 10:                     times = steps / 10                     steps = steps % 10                 else:                     times = 1                 for t in range(times):                     self.move(steps)                 start = index + 1                 index += 1             elif source[index] == '(':                 right = index                 while source[right] != ')':                     right += 1                 times = int(source[start:index])                 for t in range(times):                     self.parse_path(source[index+1:right])                 index = right + 1                 start = index             else:                 index += 1  if __name__ == "__main__":     m = Movement(0,0,0,0)     # 2T3T5     # 32T     # 3(4T2T)5T     #m.parse_path("2T3T5")     #m.parse_path("32T")     m.parse_path("3(4T2T)5T") 
        
         
         

Lista de respuestas


Relacionados problema

3  Usuario rápido para algunos números, luego imprime el máximo y min  ( Prompt user for some numbers then print the max and min ) 
La función de este programa está solicitando repetidamente a un usuario para números enteros hasta que el usuario ingrese en 'done' . Una vez que se ingresa ...

3  Seleccione Quick - Shuffle para hacer una clasificación más rápida  ( Quick select shuffle to make sorting faster ) 
Estoy tratando de usar el shuffle para mejorar el peor caso del escenario de selección rápida (por ejemplo, cada vez, el valor de pivote seleccionado es el má...

4  Uso eficiente de la expresión regular y la manipulación de cadenas  ( Efficient use of regular expression and string manipulation ) 
La siguiente es mi solución a java vs c ++ . Creo que la forma en que he usado, la biblioteca de RE es ineficiente, y es posible erróneas, ya que estoy obten...

1  Foldify - Una herramienta de carpeta de Python Tree Tree  ( Foldify a python folder tree manager tool ) 
El objetivo era crear una herramienta para ayudar a administrar las estructuras de las carpetas y permitirme crear plantillas de estas carpetas y almacenarlas...

4  Atomas Clone en Python  ( Atomas clone in python ) 
Aquí está mi clon de mierda de atomas , un juego de rompecabezas donde combina pequeños átomos en otros más valiosos. 9988776655544337 ¿Hay algún códig...

6  Comprobando una cuadrícula de palabras  ( Checking a word grid ) 
Escribí este programa donde puede ingresar x cantidad de palabras que de longitud x que comprueba si la cuadrícula se formó son las mismas palabras vertic...

10  Protocolo de red usando TCP, enviando imágenes a través de sockets  ( Network protocol using tcp sending images through sockets ) 
Me gustaría preguntar sobre su opinión sobre mi código. La idea es simple: diseñé mi propio protocolo, donde el cliente le pregunta al servidor sobre la image...

2  Dos formas de aleatorias aleatoriamente las tarjetas  ( Two ways to randomly shuffle cards ) 
Aquí hay dos implementaciones que escribí para aleatorizar las tarjetas. El primer método ( dt5 ) Selecciona una tarjeta aleatoria, luego lo quita al frent...

6  Valores coincidentes de la tabla HTML para actualizar los valores en Pandas DataFrame  ( Matching values from html table for updating values in pandas dataframe ) 
Esto es más un ejercicio para que me utilice a Pandas y sus cuadros de datos. Para aquellos que no escucharon de él: Panda es un paquete de Python que prop...

1  Una clase con un puntero de función en lugar de un generador  ( A class with a function pointer instead of a generator ) 
Estoy construyendo archivos Tikz, un PDF para cada imagen que tengo. El propósito es agregar texto a cada uno por separado. Las imágenes son LEGION, así que c...




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