Necesito poder buscar una letra y almacenar sus coordenadas en dos variables diferentes. Todos los métodos que he encontrado pueden encontrar con éxito el valor, pero no mencionan nada sobre las coordenadas.
TAP_CODE = [['A', 'B', 'C', 'D', 'E'],
['F', 'G', 'H', 'I', 'J'],
['L', 'M', 'N', 'O', 'P'],
['Q', 'R', 'S', 'T', 'U'],
['V', 'W', 'X', 'Y', 'Z']]
La idea es convertir las coordenadas en una cadena de puntos separados por un espacio que indique el código de tap. Ej: '.. ...' para H, '.... ..' para R
5 respuestas
Esta es un forma de hacerlo:
>>> TAP_CODE = [['A', 'B', 'C', 'D', 'E'],
['F', 'G', 'H', 'I', 'J'],
['L', 'M', 'N', 'O', 'P'],
['Q', 'R', 'S', 'T', 'U'],
['V', 'W', 'X', 'Y', 'Z']]
>>> def f(l, ch):
for i,sub_list in enumerate(l):
if ch in sub_list:
print ('.'*(i+1),' ', '.'*(sub_list.index(ch)+1))
>>> f(TAP_CODE, 'H')
.. ...
>>> f(TAP_CODE, 'R')
.... ..
Cómo lo manejaría ...
En python 3.5
def dots(matrix, target):
for i in range(len(matrix[0])):
for t in range(len(matrix[1])):
if TAP_CODE[i][t] == target:
coords = (i+1,t+1)
for i in range(coords[0]):
print('.', end="")
print(' ', end="")
for t in range(coords[1]):
print('.', end="")
dots(TAP_CODE, 'H')
Salida
.. ...
Tal vez no sea la forma más pitónica , sino una forma de abordarlo sin introducir nada innecesario, lo que creo mantiene las cosas sin ambigüedades: ^)
Esta es otra forma de hacerlo:
def get_coordinates(letter):
for i in range(len(TAP_CODE)):
if letter in TAP_CODE[i]:
x = i
y = TAP_CODE[i].index(letter)
return x, y
>>> get_coordinates('M')
(2, 1)
Agregue +1
a x e y dentro de la función si no desea usar 0 como índice.
Esto es bastante simple si convierte su TAP_CODE
en un numpy.ndarray
. Luego puede usar np.where
para encontrar las coordenadas:
In [15]: TAP_CODE = np.array([['A', 'B', 'C', 'D', 'E'],
['F', 'G', 'H', 'I', 'J'],
['L', 'M', 'N', 'O', 'P'],
['Q', 'R', 'S', 'T', 'U'],
['V', 'W', 'X', 'Y', 'Z']])
In [16]: np.where(TC=='R')
Out[16]: (array([3]), array([1]))
Puede hacer esto atravesando TAP_CODE. Por el bien de este ejemplo, supongamos que está buscando el carácter 'H'.
desired = 'H'
xCord,yCord = -1,-1 # placeholder values
for y in range(len(TAP_CODE)): # traverse through all lists
for x in range(len(TAP_CODE[y]): # traverse through all elements in all lists
if(TAP_CODE[y][x] == desired): # if element is what I want
xCord, yCord = x,y
El único problema es que, por ejemplo, si buscamos 'A' y sus coordenadas son (1,1), esto devolverá (0,0), porque las listas comienzan en 0. Puede remediar esto agregando 1 a ambos xCord y luego después de haberlos encontrado.
xCord += 1
yCord += 1
Si desea convertir xCord e yCord a sus longitudes en períodos, puede usar esto:
example = 5
exampleString = "." * example
print(exampleString) -> "....."
Espero que esto ayude al profesor Plum. ¡Buena suerte!
Preguntas relacionadas
Nuevas preguntas
python
Python es un lenguaje de programación multipropósito, de tipificación dinámica y de múltiples paradigmas. Está diseñado para ser rápido de aprender, comprender y usar, y hacer cumplir una sintaxis limpia y uniforme. Tenga en cuenta que Python 2 está oficialmente fuera de soporte a partir del 01-01-2020. Aún así, para preguntas de Python específicas de la versión, agregue la etiqueta [python-2.7] o [python-3.x]. Cuando utilice una variante de Python (por ejemplo, Jython, PyPy) o una biblioteca (por ejemplo, Pandas y NumPy), inclúyala en las etiquetas.