【问题标题】:Converting a letter to a digit for phone number in Python在 Python 中将字母转换为电话号码的数字
【发布时间】:2014-03-06 04:04:04
【问题描述】:

我正在尝试编写一个程序,提示用户输入电话号码作为字符串。输入可以包含字母,程序将字母(无论是大写还是小写)转换为数字,而其他所有字符保持不变。这是我目前所拥有的:

def getNumber(uppercaseLetter):
    if uppercaseLetter == 'A':
        number = 2
    elif uppercaseLetter == 'B':
        number = 2
    elif uppercaseLetter == 'C':
        number = 2
    elif uppercaseLetter == 'D':
        number = 3
    elif uppercaseLetter == 'E':
        number = 3
    elif uppercaseLetter == 'F':
        number = 3
    elif uppercaseLetter == 'G':
        number = 4
    elif uppercaseLetter == 'H':
        number = 4
    elif uppercaseLetter == 'I':
        number = 4
    elif uppercaseLetter == 'J':
        number = 5
    elif uppercaseLetter == 'K':
        number = 5
    elif uppercaseLetter == 'L':
        number = 5
    elif uppercaseLetter == 'M':
        number = 6
    elif uppercaseLetter == 'N':
        number = 6
    elif uppercaseLetter == 'O':
        number = 6
    elif uppercaseLetter == 'P':
        number = 7
    elif uppercaseLetter == 'Q':
        number = 7
    elif uppercaseLetter == 'R':
        number = 7
    elif uppercaseLetter == 'S':
        number = 7
    elif uppercaseLetter == 'T':
        number = 8
    elif uppercaseLetter == 'U':
        number = 8
    elif uppercaseLetter == 'V':
        number = 8
    elif uppercaseLetter == 'W':
        number = 9
    elif uppercaseLetter == 'X':
        number = 9
    elif uppercaseLetter == 'Y':
        number = 9
    elif uppercaseLetter == 'Z':
        number = 9
    return number

def translateNumber():
    phoneNumber = str(input("Enter a string: "))
    for char in phoneNumber:
        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']:
        getNumber(char)
        return char
        else:
            return char
        print(phoneNumber)

由于某种原因,我无法让它工作,而且我不确定问题出在哪里。有人可以帮我解决问题吗?谢谢!

【问题讨论】:

    标签: python phone-number


    【解决方案1】:

    没有解释您的代码(Chrisitan 已经完成)。这只是一种方法:

    >>> char_numbers = [('abc',2), ('def',3), ('ghi',4), ('jkl',5), ('mno',6), ('pqrs',7), ('tuv',8), ('wxyz',9)]
    >>> char_num_map = {c:v for k,v in char_numbers for c in k}
    >>> phone = "JUST 1 NUMBER"
    >>> result = "".join(str(char_num_map.get(v,v)) for v in phone.lower())
    >>> result
    '5878 1 686237'
    

    【讨论】:

    • 问题是,如果我想输入一个数字,比如说:1-800-Flowers,但我希望它返回 1-800-3569377。我该怎么做?
    • 它已经在这样做了。只需使用“1-800-Flowers”填充phone 变量...
    • 谢谢!我在那个方面的错误。我非常感谢您的帮助
    【解决方案2】:

    您的函数getNumber() 返回一个数字,但您没有存储它。要存储它,请将结果分配给一个变量,然后返回它:

    def translateNumber():
        phoneNumber = str(input("Enter a string: "))
        for char in phoneNumber:
            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 = getNumber(char)
                return result
            else:
                return char
    

    【讨论】:

    • 这个解决方案实际上回答了“为什么我的函数不起作用”的问题。其他解决方案是获得所需结果的其他方法。
    【解决方案3】:
    def getNumber(uppercaseLetter):  
    #Create a function to return phone number
        ascii = ord(uppercaseLetter) # get ascii using ord() method
        # returns all the possible digits
        if ascii < 83:
            Number = (ascii - 65)//3+2
        elif ascii == 83:
            Number = 7
        elif ascii >83 and ascii < 97:
            Number = 8
        #If the input char is a digit, returns the digit
        elif isdigit(uppercaseLetter) == True:
            Number = uppercaseLetter
        else: 
            Number = 9
        Number = str(Number)
        return Number 
    
    def main():     # Define the main function
        output = "" # Setting the output as a blank string
        str = input('Enter a string: \n') # Get input from user
        lst = [x for x in str] # convert all char in str to a list
        for x in str:
            # If the char x is alphabet make it to the uppercase
            if isdigit(x) == False and isalnum(x) == True:
               uppercaseLetter = x.upper()
               result = getNumber(uppercaseLetter)
               output = output + result
               if isalnum(x) == False: # If the char x is a digit
                   output = output + x
            else:
                output = output + x
        print(output)        
    main() # Excute the main function
    

    【讨论】:

    • 虽然此代码可能会解决问题,including an explanation 关于如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请编辑您的答案以添加解释并说明适用的限制和假设。
    • 感谢这个答案让我走了。我想为用户输入的字母打印数字。但是代码“elif ascii > 83 and ascii
    猜你喜欢
    • 1970-01-01
    • 2014-12-18
    • 2010-11-30
    • 2015-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 2023-04-04
    相关资源
    最近更新 更多