Skip to content Skip to sidebar Skip to footer

Converting Individual Digits To String

I think i'm very close but i cant seem to fix my issues. I need a function that takes a 10-digit input from user (me) and sets each letter to is numeric value. Example: user inputs

Solution 1:

phone_number = '941-019-aBcD'# A map of what letters to convert to what digits.#  I've added q and wxy & z.
digit_map = {
    'abc': 2,
    'def': 3,
    'ghi': 4,
    'jkl': 5,
    'mno': 6,
    'pqrs': 7,
    'tuv': 8,
    'wxyz': 9
}

# Break this out into one letter per entry in the dictionary#  to make the actual work of looking it up much simpler.#  This is a good example of taking the data a person might#  have to deal with and making it easier for a machine to#  work with it.
real_map = {}
for letters, number in digit_map.iteritems():
    for letter in letters:
        real_map[letter] = number

# Empty new variable.
numeric_phone = ''# For each character try to 'get' the number from the 'real_map'#  and if that key doesn't exist, just use the value in the#  original string. This lets existing numbers and other#  characters like - and () pass though without any special#  handling.# Note the call to `lower` that converts all our letters to#  lowercase. This will have no effect on the existing numbers#  or other speacial symbols.for ch in phone_number.lower():
    numeric_phone += str(real_map.get(ch, ch))

print(numeric_phone)

Solution 2:

defmain(phone_number):
    digits = ["2", "3", "4", "5", "6", "7", "8", "9"]
   numeric_phone=" "for ch in phone_number:
       if ch.isalpha():
           iford(ch) >= 97:
               ch = +2 (ord(ch)-97)/3else:
               ch = +2 (ord(ch)-65)/3
       numeric_phone= numeric_phone+ch
   print (numeric_phone)

Use ord() to convert chars to their ASCII values and then get the right number.

Solution 3:

You can create a formula to ascertain the correct number to add depending on the letter:

math.ceil((index(char)+1)/3)

Use a list and depending on which character it is, append a number to the list. At the end, return the list, but joined so that it is a string:

def numerify(inp):
        from math import ceil as _ceil
        fromstring import lowercase as _lowercase
        chars = []
        forcharin inp:
                ifchar.isalpha():
                        num = _ceil((_lowercase.index(char)+1)/float(3))
                        chars.append(str(int(num+1)))
                else:
                        chars.append(char)
        return''.join(chars)

>>>from numerify import numerify>>>numerify('1')
'1'
>>>numerify('941-019-abcd')
'941-019-2223'
>>>

Solution 4:

I think it's easiest to pre-calculate the number character for each letter.

# len(keys) == 26 so that the index of a letter# maps to its phone keykeys =           ['2']*3 + ['3']*3 \
     + ['4']*3 + ['5']*3 + ['6']*3 \
     + ['7']*4 + ['8']*3 + ['9']*4

def letter_to_key(x):
    if x.isalpha():
        # calculate the 'index' of a letter.# a=0, b=1, ..., z=25index = ord(x.lower()) - ord('a')
        returnkeys[index]
    # If it's not a letter don't change it.returnx

def translate_digits(phone_num):
    return''.join(map(letter_to_key, phone_num))

print(translate_digits('941-019-abcd'))

Post a Comment for "Converting Individual Digits To String"