用python将带字母的电话号码翻译成所有号码。我做错什么了?

2024-10-01 02:24:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直只得到打印的翻译数字的第一个字符

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()

请帮我弄清楚怎么回事。关键是要把1-800-FLOWERS之类的东西翻译成1-800-3569377。因为某些原因,如果我输入,我得到的唯一返回值是“1”


Tags: orinnumberreturnifmaindefphone
3条回答

在Python2.7中,一个替代的解决方案需要更少的代码,如下所示。在

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()

但是,string模块的translate方法在python2.7中被弃用,在python3中被删除,因此这在python3中不起作用。在

虽然这似乎在所有角色身上循环

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

实际上,它在处理第一个字符后返回。在

您可能希望生成一个字符串:

^{pr2}$

你一翻译就返回这个角色。你的代码打印原始电话号码。然后,它调用translateNumber。translateNumber遍历数字,直到找到一个字母字符。当它这样做时,它将它转换成一个数字并返回它。“return”充当中断-循环结束。在

我建议从char=字符上部(). 这样就不必将所有字符单独转换为大写。在

这是一个稍微干净一点的版本。这将添加字母作为数字,数字作为数字。它将忽略任何不是数字或字母的字符。您可以添加几行,以确保电话号码大小正确,并插入正确的电话号码标点符号。在

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()

相关问题 更多 >