converting individual digits to string

后端 未结 4 882
感动是毒
感动是毒 2021-01-28 11:38

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:

相关标签:
4条回答
  • 2021-01-28 12:10
    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)
    
    0 讨论(0)
  • 2021-01-28 12:14

    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
            from string import lowercase as _lowercase
            chars = []
            for char in inp:
                    if char.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'
    >>>
    
    0 讨论(0)
  • 2021-01-28 12:20
    def main(phone_number):
        digits = ["2", "3", "4", "5", "6", "7", "8", "9"]
       numeric_phone=" "
       for ch in phone_number:
           if ch.isalpha():
               if ord(ch) >= 97:
                   ch = +2 (ord(ch)-97)/3
               else:
                   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.

    0 讨论(0)
  • 2021-01-28 12:25

    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 key
    keys =           ['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=25
            index = ord(x.lower()) - ord('a')
            return keys[index]
        # If it's not a letter don't change it.
        return x
    
    def translate_digits(phone_num):
        return ''.join(map(letter_to_key, phone_num))
    
    print(translate_digits('941-019-abcd'))
    
    0 讨论(0)
提交回复
热议问题