Преобразование буквенных пар в декартовы координаты или ('A', 'B') в (1,2) - PullRequest
0 голосов
/ 11 марта 2011

Я пишу свою первую программу. Я использовал Python3 для этого. Я столкнулся с проблемой, которая, на мой взгляд, настолько проста, что я нигде не могу найти ответ, обсуждаемый, или, может быть, я слишком туп, чтобы это увидеть. спасибо за терпение с моей неопытностью.

комбинаций ('gimp', 2) возвращает

[('g', 'i'), ('g', 'm'), ('g', 'p'), ('i', 'm'), ('i', 'p'), ('m', 'p')]

Я хочу, чтобы это были декартовы координаты, поэтому я сделал это ...

(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,x) = range(17)

в надежде, что буквы будут заменены цифрами, но досадные (') вокруг букв мешают этому.

Как мне получить список, похожий на этот?

[(g,i),(g,m)...]

Я попытался использовать функцию замены без удачи

combo.replace("'","")

или, если есть более простой способ превратить список комбинаций из буквенных пар в координаты, я бы хотел это знать.

Заранее благодарю за помощь.

Ответы [ 3 ]

0 голосов
/ 15 марта 2011

Спасибо, Стеф и Апалала за вашу помощь. Я не смог реализовать ваше решение, но оно помогло мне визуализировать не элегантное решение, которое я смог выполнить. Я хотел бы опубликовать свое решение здесь на тот случай, если кто-то с таким небольшим количеством навыков кодирования, как я, может найти его полезным.

Что я сделал, так это проверил список комбинаций, которые у меня были для каждой возможной комбинации, и, если комбинация присутствовала, я расширил новый список координат соответствующими номерами. Я думаю, что именно это решение даст гораздо более эффективный способ. Мои цели включали только 120 возможных комбинаций, поэтому этот метод был утомительным, но выполнимым.

 combo = (list (combinations (abcdefghijlmnop, 2)) 

 cords = []
 if ('a','b') in combo:
      cords.append ((0,1))
 else:quit

Затем я повторил эти последние три строки для (a, c) (a, d) и т. Д.

0 голосов
/ 17 марта 2011

Возможно, вы захотите использовать порядковые значения символов в ваших интересах. Если вы используете смещение порядкового значения символа от порядкового значения «а», вы должны получить соответствующую координату.

Попробуйте что-то вроде:

from itertools import combinations

word = "gimp"

coords = [(ord(x) - ord('a'), ord(y) - ord('a')) for x, y in combinations(word.lower(), 2)]

Это установит coords в:

[(6, 8), (6, 12), (6, 15), (8, 12), (8, 15), (12, 15)]

Примечание : Это не будет работать должным образом, если вы используете в своем слове не-ASCII символы.

0 голосов
/ 11 марта 2011

От другого новичка в Python вы можете создать словарь с буквами в качестве ключей и числами по вашему выбору в качестве значений для каждой буквы и получить число для каждой буквы.

#1 make a dict
prefValues = {'g' : 1, 'i' : 2, 'm' : 3, 'p' : 4}

#2 make a list 
word = []
for char in 'gimp':
    #if the letter is in the dict
    if char in prefValues:
        #append in the list the corresponding value
        word.append(prefValues[char])   

Теперь выпродолжать производить кортежи для декартовых координат.Если у вас возникли проблемы с получением пар из списка, проверьте этот ответ Пары из одного списка

...