Как преобразовать строку чисел в строку букв?

Я пытаюсь создать свой первый скрипт Python. Я хочу преобразовать строку чисел в строку букв.

Example: From 0123456789 to ACGDBFVKIP 

Я написал очень простой код, который позволяет преобразовывать только одно число, но не строку чисел. Я почти уверен, что что-то не так в циклической части кода. Любая помощь будет принята с благодарностью.

print('Enter number here: ')
integer = input()
while not(integer.isdigit()):
    print('only numbers!')
    print('Enter number here: ')
    integer = input()


NumToLetter = {'0': 'A', '1': 'C', '2': 'G', '3': 'D', '4': 'B', '5': 'F', '6': 'V', '7': 'K', '8': 
'I', '9': 'P'}


letter = ''
integer_length = len(integer)


if integer_length > 0:
   letter = NumToLetter[integer]

print(letter)
Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
126
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Если integer это число, попробуйте так:

integer = str(integer)
for num,let in NumToLetter.items():
    integer = integer.replace(num,let)
Ответ принят как подходящий

Вам нужно написать цикл для перевода всех чисел в буквы. После того, как вы получите ввод, вы можете сделать что-то вроде этого:

result = ''
for num in integer:
    result += NumToLetter[num]

print(result)

Но есть способ проще, str.translate:

result = integer.translate(str.maketrans('0123456789','ACGDBFVKIP'))
print(result)

Проблема здесь в том, что NumToLetter сопоставляет одну цифру с буквой, а ввод представляет собой строку цифр. Вместо этого вы можете перебрать каждое число на входе, сопоставить его с буквой, а затем добавить к результату. Например:

print('Enter number here: ')
number_input = input()
while not number_input.isdigit():
    print('only numbers!')
    print('Enter number here: ')
    number_input = input()


NumToLetter = {'0': 'A', '1': 'C', '2': 'G', '3': 'D', '4': 'B', '5': 'F', '6': 'V', '7': 'K', '8': 
'I', '9': 'P'}


number_length = len(number_input)
if number_length > 0:
    letters = ""
    for number in number_input:
        letters += NumToLetter[number]

    print(letters)

Ввод: 123

Выход: CGD

Вы можете использовать функцию карты:

numbers = '0123456789'
NumToLetter = {'0': 'A', '1': 'C', '2': 'G', '3': 'D', '4': 'B', '5': 'F', '6': 'V', '7': 'K', '8':
'I', '9': 'P'}
letters = "".join(map(lambda x: NumToLetter[x], list(numbers)))
print(letters) # ACGDBFVKIP

По сути, map примените лямбда-функцию к list(numbers), а list(numbers):

['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

Это будет работать более эффективно, если лямбда будет заменена на NumToLetter.__getitem__ в качестве метода, по которому должен повторяться список.

JenilDave 11.12.2020 10:36

Хороший момент @JenilDave, но я использовал этот подход, потому что я думаю, что его легче понять.

Keredu 11.12.2020 10:39

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