Телефонный номер. При вводе буквенного значения перевести в цифры. Python

473 просмотра
0
0 Комментариев

Прошу помочь с решением задачи. Необходимо перевести буквенное обозначение номера в циферное. Input: 000 sinatra Output: 000 7462872

def as_numeric(text):
    thelist=list(text)
    for letters in thelist:
         tel_numbers={
        '2':['a','b','c'],
        '3':['d','e','f'],
        '4':['g','h','i'],
        '5':['j','k','l'],
        '6':['m','n','o'],
        '7':['p','q','r','s'],
        '8':['t','u','v'],
        '9':['w','x','y','z']}
 
    if letters==tel_numbers:
        print(tel_numbers)
    else:
        break

as_numeric(‘000 sinatra’)


Добавить комментарий

3 Answers

Python Опубликовано 16.12.2018
0

Исправил код автора:

def as_numeric(number):
    result = ''
    tel_numbers = {key : value for key, value in zip(range(2, 10), ['abc', 'def', 'ghi', 'jkl',
                                                                    'mno', 'pqrs', 'tuv', 'wxyz'])}
    for i in str(number).lower():
        if i.isdigit() or i == ' ':
            result += i
            continue
        for key in tel_numbers.keys():
            if i in tel_numbers[key]:
                result += str(key)
    return result
 
print(as_numeric('000 sinatra')) # 000 7462872

Добавить комментарий
0

Из словаря tel_numbers сделал обратный — phone_letter_by_num, а после оставалось собрать новую строку:

def phone_as_numeric(text):
    phone_letter_by_num = {
        'l': '5', 'b': '2', 'n': '6', 'q': '7',
        'i': '4', 'j': '5', 'd': '3', 'x': '9',
        'h': '4', 's': '7', 'v': '8', 'w': '9',
        'g': '4', 'p': '7', 'k': '5', 'y': '9',
        'u': '8', 'a': '2', 'm': '6', 'o': '6',
        'e': '3', 'f': '3', 'c': '2', 'r': '7',
        't': '8', 'z': '9',
    }
 
    new_text = ''
 
    for c in text:
        if c not in phone_letter_by_num:
            new_text += c
        else:
            new_text += phone_letter_by_num[c]
 
    return new_text
 
 
print(phone_as_numeric('000 sinatra'))  # 000 7462872

Добавить комментарий
0

translate – возвращает копию строки, в которой все символы были переведены с помощью словаря

phone_dict = {ord(letter): str(num) for num, le in enumerate(
    ['abc', 'def', 'ghi', 'jkl', 'mno', 'pqrs', 'tuv', 'wxyz'], start=2) for letter in le}
print('000 sinatra'.translate(phone_dict))  # 000 7462872

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up