Reputation: 13
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
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
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
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