使用 python(排列和正则表达式)的数字到字母数字编码器
Numeric to alphanumeric encoder using python (permutation and regex)
堆垛机朋友们好,
我遇到了问题,希望您能帮助解决。
我写了两段代码,我想将它们合并在一起。
基本上在给定的数字字符串输入上,我想遍历字符串中的每个字符。字符由条件语句分析并转换为另一个符号,例如数字转换成字母,本质上我正在尝试创建一个编码器。此外,我需要灵活地使用不同的符号对数字进行编码,例如数字零到 A 或 B,我想比较输出列表,以便我可以排列每个可能的组合。
示例:
输入
01
- 0 至 A*
- 0 至 B*
- 1 到 *C
输出
空调
BC
到目前为止,我已经尝试了一些组合,我认为我把事情复杂化了。
第一个应用程序迭代单词列表,如果语句包含数字。不相关的数字 "packed" 带有星号,用于下一阶段的处理。
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)
我似乎不知道如何将这两个应用程序合并在一起。我相信我需要将第一个应用程序的输出创建为单独的字符串,以便在第二个应用程序中进行 post 处理,但是我认为可能有一种非常有效的方法来生成我需要的结果。
此外,我相信 "itertools library" 中有一个排列函数,我可以利用它来产生我在第二个应用程序中需要的结果。
您正在寻找 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')
堆垛机朋友们好,
我遇到了问题,希望您能帮助解决。
我写了两段代码,我想将它们合并在一起。 基本上在给定的数字字符串输入上,我想遍历字符串中的每个字符。字符由条件语句分析并转换为另一个符号,例如数字转换成字母,本质上我正在尝试创建一个编码器。此外,我需要灵活地使用不同的符号对数字进行编码,例如数字零到 A 或 B,我想比较输出列表,以便我可以排列每个可能的组合。
示例:
输入 01 - 0 至 A* - 0 至 B* - 1 到 *C
输出 空调 BC
到目前为止,我已经尝试了一些组合,我认为我把事情复杂化了。
第一个应用程序迭代单词列表,如果语句包含数字。不相关的数字 "packed" 带有星号,用于下一阶段的处理。
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)
我似乎不知道如何将这两个应用程序合并在一起。我相信我需要将第一个应用程序的输出创建为单独的字符串,以便在第二个应用程序中进行 post 处理,但是我认为可能有一种非常有效的方法来生成我需要的结果。
此外,我相信 "itertools library" 中有一个排列函数,我可以利用它来产生我在第二个应用程序中需要的结果。
您正在寻找 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')