将个别数字转换为字符串

时间:2015-03-23 04:30:37

标签: python-3.x

我认为我非常接近但似乎无法解决我的问题。我需要一个从用户(我)输入10位数的函数,并将每个字母设置为数值。

示例:用户输入(941-019-abcd)函数应该接受此并返回(941-019-2223) 我应该做的任何不同的事情请随时详细说明

这是我迄今为止所拥有的:

def main(phone_number):

digits = ["2", "3", "4", "5", "6", "7", "8", "9"]
numeric_phone=" "
ch = digits[i] 
for ch in phone_number:
    if ch.isalpha():
        elif ch== 'A' or 'b' or 'c':
            i=2
        elif ch== 'd' or 'e' or 'f':
            i=3
        elif ch== 'g' or 'h' or 'i':
            i=4
        elif ch=='j' or 'k' or 'l':
            i=5
        elif ch== 'm' or 'n' or 'o':
            i=6
        elif ch== 'p' or 'r' or 's':
            i=7
        elif ch=='t' or 'u' or 'v':
            i=8
        else:
            index=9
numeric_phone= numeric_phone+ch
print (numeric_phone)

4 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

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)

使用ord()将字符转换为ASCII值,然后得到正确的数字。

答案 2 :(得分:0)

您可以根据字母创建公式以确定要添加的正确数字:

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

使用列表并根据其中的字符,在列表中附加一个数字。最后,返回列表,但是join ed,以便它是一个字符串:

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'
>>>

答案 3 :(得分:0)

我认为最简单的方法是预先计算每个字母的数字字符。

# 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'))