Цифро-буквенно-цифровой кодировщик, использующий python (перестановка и регулярное выражение) - PullRequest
0 голосов
/ 02 февраля 2019

Привет, коллеги-укладчики,

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

Я написал два фрагмента кода, которые хочу объединить.Основываясь на вводе числовой строки, я хочу перебирать каждый символ в строке.Символы анализируются условным оператором и преобразуются в другой символ, например, числа, преобразованные в буквы, по сути, я пытаюсь создать кодировщик.Кроме того, мне нужна гибкость для кодирования чисел различными символами, например, от нуля до A или B, и я хочу сравнить выходные списки, чтобы я мог переставлять каждую возможную комбинацию.

Пример:

Ввод 01 - от 0 до A * - от 0 до B * - от 1 до * C

Выходы AC BC

Я уже пробовал несколько комбинаций и думаю, что я слишком усложняювещи.

Это первое приложение выполняет итерации по списку слов и, если в операторе содержатся числа.Номера, которые не имеют значения, "упакованы" звездочкой для использования на следующем этапе обработки.

import re

wordlist = ["012"]

for i in range(0, 2):
    if i == 0:
        dictionary = ['A', 'B']
        for symbol in dictionary:
            for x in range(0, 1):
                zero = re.sub("0", symbol, wordlist[x])
                zero = re.sub("[1-9]", "*", zero)
                wordlist.append(zero)
    elif i == 1:
        dictionary = ['C']
        for symbol in dictionary:
            one = re.sub("1", symbol, wordlist[x])
            one = re.sub("[02-9]", "*", one)
            wordlist.append(one)

del wordlist[0]
print(wordlist)

Второе приложение объединяет два слова вместе:

wordone = "A****"
wordtwo = "*B***"
# wordthree = "**C**"

union = []

for charA, charB in zip(wordone, wordtwo):
    enumerate(charA)
    asciicharA = ord(charA)
    enumerate(charB)
    asciicharB = ord(charB)

    if (asciicharA ^ asciicharB != 0):
        if (chr(asciicharA) == "*"):
            union.append(chr(asciicharB))
        elif (chr(asciicharB) == "*"):
            union.append(chr(asciicharA))
    elif (charA and charB == "*"):
        union.append(charA or charB)

print(union)

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

Более того, я считаю, что в «библиотеке itertools» есть функция перестановки, которой я могу воспользоваться для получения результатов, которые мне нужны во втором приложении.

1 Ответ

0 голосов
/ 02 февраля 2019

Вы ищете itertools.product в сочетании с распаковкой списка:

from itertools import product

# map every possible combination here
substitutes = {'0': ['A', 'B'], '1': 'C', '2': ['D', 'E', 'F']}

# the actual input
input = '012'

raw = [substitutes[char] for char in input]
for c in product(*raw):
    print(c)

Что дает

('A', 'C', 'D')
('A', 'C', 'E')
('A', 'C', 'F')
('B', 'C', 'D')
('B', 'C', 'E')
('B', 'C', 'F')
...