如何使用字典将数字代码翻译成单词

How to translate numeric code to words using dictionary

我必须让这个程序接收编码字符串和 returns 普通文本。例如:

input = 42 32 53 53 63 *43 *21 61 *61 21 73 52 
output = hello i am mark

我有这本字典,等价物:

keypad= {'21': 'a', '22': 'b', '23': 'c', '31': 'd', '32': 'e', '33': 'f', '41': 'g', '42': 'h', '43': 'i',
           '51': 'j', '52': 'k', '53': 'l', '61': 'm', '62': 'n', '63': 'o', '71': 'p', '72': 'q', '74': 'r',
           '74': 's', '81': 't', '82': 'u', '83': 'v', '91': 'w', '93': 'x', '93': 'y', '94': 'z', '*': ' '}

我需要按原样使用它。我想我需要迭代每个数字并获取字典中的键并将其添加到一个空字符串中,但我不知道该怎么做。如果有人有想法,我将非常感激。

input_value = input('Write something: ').strip().split(' ')


keypad= {'21': 'a', '22': 'b', '23': 'c', '31': 'd', '32': 'e', '33': 'f', '41': 'g', '42': 'h', '43': 'i',
           '51': 'j', '52': 'k', '53': 'l', '61': 'm', '62': 'n', '63': 'o', '71': 'p', '72': 'q', '73': 'r',
           '74': 's', '81': 't', '82': 'u', '83': 'v', '91': 'w', '93': 'x', '93': 'y', '94': 'z', '*': ' '}
output = ""
for a in input_value:
    if '*' not in a:
        output+= keypad[a]
    elif a.startswith('*'):
        output+=' '
        output+=keypad[a[1:]]
    elif a.endswith('*'):
        output+=keypad[a[:-1]]
        output+=' '
print(output)

我知道当键不在字典中时上面的代码会给你一个错误然后你可以使用这个。

input_value = input('Write something: ').strip().split(' ')


keypad= {'21': 'a', '22': 'b', '23': 'c', '31': 'd', '32': 'e', '33': 'f', '41': 'g', '42': 'h', '43': 'i',
           '51': 'j', '52': 'k', '53': 'l', '61': 'm', '62': 'n', '63': 'o', '71': 'p', '72': 'q', '73': 'r',
           '74': 's', '81': 't', '82': 'u', '83': 'v', '91': 'w', '93': 'x', '93': 'y', '94': 'z', '*': ' '}
output = ""
for a in input_value:
    try:
        if '*' not in a:
            output+= keypad[a]
        elif a.startswith('*'):
            output+=' '
            output+=keypad[a[1:]]
        elif a.endswith('*'):
            output+=keypad[a[:-1]]
            output+=' '
    except KeyError:
        pass
print(output)

我注意到您的字典中缺少一些关键字。你需要先解决这个问题,然后试试这个:

for item in inp.split():
    if item.startswith("*"):
        print(keypad["*"], end="")
        item = item[1:]
    print(keypad[item], end="")
print()

您首先检查数字是否以星号开头,如果是这样您需要单独打印 * 的值,然后使用 item = item[1:]*N 更改为 N 并继续。如果你不想直接打印到标准输出,你可以有一个空字符串变量,而不是打印只是将值与该字符串连接:

result = ""
for item in inp.split():
    if item.startswith("*"):
        result += keypad["*"]
        item = item[1:]
    result += keypad[item]
print(result)

如果您有兴趣,也可以使用生成器表达式编写:

print(
    "".join(
        f"{keypad['*']}{keypad[i[1:]]}" if i.startswith("*") else keypad[i]
        for i in inp.split()
    )
)

另一种选择:

  1. Split on space,循环
  2. Split on digits,循环
  3. Check if key exist in keypad
  4. 附加到输出
import re

input = '42 32 53 53 63 *43 *21 61 *61 21 73 52'
keypad= {'21': 'a', '22': 'b', '23': 'c', '31': 'd', '32': 'e', '33': 'f', '41': 'g', '42': 'h', '43': 'i', '51': 'j', '52': 'k', '53': 'l', '61': 'm', '62': 'n', '63': 'o', '71': 'p', '72': 'q', '74': 'r', '74': 's', '81': 't', '82': 'u', '83': 'v', '91': 'w', '93': 'x', '93': 'y', '94': 'z', '*': ' '}

result = ''
for i in input.split(' '):
    for j in list(filter(None, re.split('(\d+)', i))):
        if j in keypad:
            result += keypad[j]
        else:
            result += '?'
           
print(input)
print(result)
42 32 53 53 63 *43 *21 61 *61 21 73 52
hello i am ma?k

由于 73 键不存在于 keypad 中,它被解码为 ?,您可以在键存在时将 else 更改为所需的操作不存在。

Try it online!