【问题标题】:translating phone number with letter to all numbers in python. what am i doing wrong?将带有字母的电话号码翻译成python中的所有数字。我究竟做错了什么?
【发布时间】:2016-07-19 02:22:02
【问题描述】:

我一直只显示打印的翻译号码的第一个字符

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”

【问题讨论】:

    标签: python char phone-number


    【解决方案1】:

    在 Python 2.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()
    

    不过,字符串模块的 translate 方法在 Python 2.7 中已被弃用,并在 Python 3 中被删除,因此这在 Python 3 中不起作用。

    【讨论】:

    • 适用于 python 2.7,但如果您使用的是 python 3,请使用 str.maketrans 而不是 string.maketrans。
    • 好点。我通常使用 Python 2,但我没有意识到 translate 方法已从 Python 3 中删除。我更新了答案以反映您的重点。
    【解决方案2】:

    虽然这似乎遍历了所有字符,

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

    【讨论】:

    • 好的,谢谢!我添加了您的建议,然后必须将我的数字放在引号中,它可以工作。
    【解决方案3】:

    翻译后立即返回字符。您的代码打印原始电话号码。然后,它调用 translateNumber。 translateNumber 遍历数字,直到找到一个字母字符。当它这样做时,它将它转换为一个数字并返回它。 'return' 充当中断 - 循环结束。

    我建议从 char = char.upper() 开始翻译。这样您就不必将所有字符单独转换为大写。

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

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

    【讨论】:

      猜你喜欢
      • 2016-07-18
      • 2016-01-24
      • 1970-01-01
      • 2013-08-06
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 2019-12-23
      • 1970-01-01
      相关资源
      最近更新 更多