簡體   English   中英

將帶字母的電話號碼轉換為python中的所有數字。 我究竟做錯了什么?

[英]translating phone number with letter to all numbers in python. what am i doing wrong?

我一直只得到打印的翻譯號碼顯示的第一個字符

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

不過,在Python 2.7中不推薦使用string模塊的translation方法,而在Python 3中已將其刪除,因此在Python 3中不起作用。

雖然這似乎遍歷了所有角色,

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

翻譯完字符后,您將立即返回該字符。 您的代碼將打印原始電話號碼。 然后,它調用translateNumber。 translateNumber會遍歷數字,直到找到字母字符為止。 完成后,它將轉換為數字並將其返回。 “返回”充當中斷-循環結束。

我建議從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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM