Числовой кодировщик в буквенно-цифровой с использованием python (перестановка и регулярное выражение)

Здравствуйте, коллеги-стакеры.

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

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

Пример:

Вход 01 - от 0 до А* - от 0 до В* - от 1 до *С

Выходы переменный ток До нашей эры

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

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

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» есть функция перестановки, которую я могу использовать для получения результатов, которые мне нужны во втором приложении.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
210
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы ищете 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')

Вау совершенно фантастика! спасибо, что ответили на мой вопрос простым и отличным кодом!

Manifesto 02.02.2019 17:17

@Manifesto: Пожалуйста. Действительно взгляните на itertools, они мощные.

Jan 02.02.2019 17:23

Другие вопросы по теме