2014-03-06 3 views
1

Я пытаюсь написать программу, предлагающую пользователю ввести номер телефона в виде строки. Ввод может содержать буквы, и программа переводит букву (в верхнем или нижнем регистре) в цифру и оставляет все остальные символы неповрежденными. Вот то, что я до сих пор:Преобразование буквы в цифру для номера телефона в Python

def getNumber(uppercaseLetter): 
    if uppercaseLetter == 'A': 
     number = 2 
    elif uppercaseLetter == 'B': 
     number = 2 
    elif uppercaseLetter == 'C': 
     number = 2 
    elif uppercaseLetter == 'D': 
     number = 3 
    elif uppercaseLetter == 'E': 
     number = 3 
    elif uppercaseLetter == 'F': 
     number = 3 
    elif uppercaseLetter == 'G': 
     number = 4 
    elif uppercaseLetter == 'H': 
     number = 4 
    elif uppercaseLetter == 'I': 
     number = 4 
    elif uppercaseLetter == 'J': 
     number = 5 
    elif uppercaseLetter == 'K': 
     number = 5 
    elif uppercaseLetter == 'L': 
     number = 5 
    elif uppercaseLetter == 'M': 
     number = 6 
    elif uppercaseLetter == 'N': 
     number = 6 
    elif uppercaseLetter == 'O': 
     number = 6 
    elif uppercaseLetter == 'P': 
     number = 7 
    elif uppercaseLetter == 'Q': 
     number = 7 
    elif uppercaseLetter == 'R': 
     number = 7 
    elif uppercaseLetter == 'S': 
     number = 7 
    elif uppercaseLetter == 'T': 
     number = 8 
    elif uppercaseLetter == 'U': 
     number = 8 
    elif uppercaseLetter == 'V': 
     number = 8 
    elif uppercaseLetter == 'W': 
     number = 9 
    elif uppercaseLetter == 'X': 
     number = 9 
    elif uppercaseLetter == 'Y': 
     number = 9 
    elif uppercaseLetter == 'Z': 
     number = 9 
    return number 

def translateNumber(): 
    phoneNumber = str(input("Enter a string: ")) 
    for char in phoneNumber: 
     if char in ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']: 
     getNumber(char) 
     return char 
     else: 
      return char 
     print(phoneNumber) 

По какой-то причине я не могу заставить его работать, и я не уверен, что проблема есть. Может кто-то, пожалуйста, помогите мне с решением? Спасибо!

ответ

5

Не объясняя свой код (уже сделано по Chrisitan). Вот только один способ:

>>> char_numbers = [('abc',2), ('def',3), ('ghi',4), ('jkl',5), ('mno',6), ('pqrs',7), ('tuv',8), ('wxyz',9)] 
>>> char_num_map = {c:v for k,v in char_numbers for c in k} 
>>> phone = "JUST 1 NUMBER" 
>>> result = "".join(str(char_num_map.get(v,v)) for v in phone.lower()) 
>>> result 
'5878 1 686237' 
+0

Проблема в том, что если я пытаюсь ввести число, скажите: 1-800-Flowers, но я хочу, чтобы он вернул 1-800-3569377. Как мне это сделать? – user3105664

+0

Это уже делается. Просто заполните «телефонную» переменную «1-800-Flowers» ... – mshsayem

+0

Спасибо! Моя ошибка в этом. Я очень ценю помощь – user3105664

3

Ваша функция getNumber() возвращает номер, но вы его не храните. Для того, чтобы сохранить его, присвоить результат переменной, а затем вернуть его:

def translateNumber(): 
    phoneNumber = str(input("Enter a string: ")) 
    for char in phoneNumber: 
     if char in ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']: 
      result = getNumber(char) 
      return result 
     else: 
      return char 
+0

Это решение фактически отвечает на вопрос «Почему моя функция не работает». Другие решения - это другие способы получить желаемый результат. – RufusVS

Смежные вопросы