Keira Bradshaw
Keira Bradshaw

Reputation: 13

translating phone number with letter to all numbers in python. what am i doing wrong?

I keep getting only the first character displayed for the printed translated number

phoneNumLetter = str(input("Please enter a phone number that contains letters: "))

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

def translateNumber(phoneNumLetter):
    for char in phoneNumLetter:
        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 = translate(char)
            return result
        else:
            return char

def main():
    print("Your original phone number was: ", phoneNumLetter)
    print("Your translated phone number is: ", translateNumber(phoneNumLetter))

main()

please help me figure out whats wrong. the point is to translate something like 1-800-FLOWERS to 1-800-3569377. for some reason if i input that the only return i get is "1"

Upvotes: 1

Views: 2756

Answers (3)

Yaelle
Yaelle

Reputation: 391

You're returning the character as soon as you translate it. You code prints the original phone number. Then, it calls translateNumber. translateNumber goes through the number until it finds an alphabet character. When it does, it translates it to a number and returns it. The 'return' acts as a break - the loop ends.

I'd recommend starting translate with char = char.upper(). Then you won't have to convert all of the characters to uppercase individually.

Here's a slightly cleaner version. This will add the letters as number and the numbers as numbers. It will ignore any characters that aren't numbers or letters. You could add a couple lines that would ensure properly sized phone numbers and insert correct phone number punctuation.

dict = {}
dict['A'] = 2
dict['B'] = 2
dict['C'] = 2
dict['D'] = 3
dict['E'] = 3
dict['F'] = 3
dict['G'] = 4
dict['H'] = 4
dict['I'] = 4
dict['J'] = 5
dict['K'] = 5
dict['L'] = 5
dict['M'] = 6
dict['N'] = 6
dict['O'] = 6
dict['P'] = 7
dict['Q'] = 7
dict['R'] = 7
dict['S'] = 7
dict['T'] = 8
dict['U'] = 8
dict['V'] = 8
dict['W'] = 9
dict['X'] = 9
dict['Y'] = 9
dict['Z'] = 9

def translateNumber(phoneNumLetter):
    cleanNumber = ''
    for char in phoneNumLetter:
        if char.isalpha():
            cleanNumber += str(dict[char.upper()])
        if char.isdigit():
            cleanNumber += str(char)
    return cleanNumber

def main():
    originalInput = str(input("Please enter a phone number: "))
    print("Your original phone number was: " + originalInput)
    print("Your translated phone number is: " + translateNumber(originalInput))

main()

Upvotes: -1

Evan VanderZee
Evan VanderZee

Reputation: 867

In Python 2.7, an alternative solution that takes much less code is the following.

from string import maketrans

letter_to_num_table = maketrans("ABCDEFGHIJKLMNOPQRSTUVWXYZ", "22233344455566677778889999")

phoneNumLetter = str(input("Please enter a phone number that contains letters: "))
def main():
    print("Your original phone number was: ", phoneNumLetter) 
    print("Your translated phone number is: ", phoneNumLetter.upper().translate(letter_to_num_table))

main()

The translate method of the string module was deprecated in Python 2.7, though, and removed in Python 3, so this doesn't work in Python 3.

Upvotes: 2

wallyk
wallyk

Reputation: 57784

While this seems to loop over all the characters,

def translateNumber(phoneNumLetter):
    for char in phoneNumLetter:
        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 = translate(char)
            return result
        else:
            return char

In fact, it returns after processing the first character.

You probably want it to build a result string:

def translateNumber(phoneNumLetter):
    result = ''
    for char in phoneNumLetter:
        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 = result + translate(char)
        else:
            result = result + char
    return result

Upvotes: 1

Related Questions