Я пытаюсь создать свой первый скрипт 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)
Если 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']
Хороший момент @JenilDave, но я использовал этот подход, потому что я думаю, что его легче понять.
Это будет работать более эффективно, если лямбда будет заменена на
NumToLetter.__getitem__
в качестве метода, по которому должен повторяться список.