2015-10-07 52 views
1

我目前正在創建一個程序,顯示出現在原始翻譯成其等效的任何字母字符的電話號碼。例如,如果我輸入字符串「521-BBB-BBBB」,則應根據我的代碼得到「5212222222」。相反,我從IDLE得到了「2222222925」。我不明白爲什麼該計劃顯示這個,而不是我正在尋找的那個。 「2」的數字是正確的,但我不明白「925」是從哪裏來的。Python字符串邏輯錯誤

這是代碼:

def charToNum(num): 
    if num == 'A' or num == 'B' or num == 'C' or num == '2': 
     return '2' 
    elif num == 'D' or num == 'E' or num == 'F' or num == '3': 
     return '3' 
    elif num == 'G' or num == 'H' or num == 'I' or num == '4': 
     return '4' 
    elif num == 'J' or num == 'K' or num == 'L' or num == '5': 
     return '5' 
    elif num == 'M' or num == 'N' or num == 'O' or num == '6': 
     return '6' 
    elif num == 'P' or num == 'Q' or num == 'R' or num == 'S' or num == '7': 
     return '7' 
    elif num == 'T' or num == 'U' or num == 'V' or num == '8': 
     return '8' 
    else: 
     return '9'

def AlphaToTel(telNum): newTelNum = telNum[0:3] + telNum[4:7] + telNum[8:12] phoneNum = '' for char in newTelNum: phoneNum = charToNum(char) + phoneNum

print(phoneNum)

AlphaToTel(「521 BBB-BBBB」)

+0

你不會在任何地方處理數字'1',所以當你輸入它時,它最終返回9。另外,您可能需要'phoneNum = phoneNum + charToNum(char)',而不是'phoneNum = charToNum(char)+ phoneNum'。這應該解決您的問題:) – Zizouz212

回答

0

問題的發生是由於您的charToNum()功能是如何定義的(因爲你是如何增加的結果, phoneNum)。

首先,你是不是考慮在charToNum()人數1,因此要爲1返回回9。你應該考慮這一點,並返回1,如果num1

其次,要添加的PHONENUM的作爲 -

phoneNum = charToNum(char) + phoneNum 

這使得添加新字符的字符串的開頭,因此你在反向的電話號碼。如果你想輸出的東西像 - "5212222222"。您需要按正確的順序添加(phoneNum + charToNum(char))或使用(+=)。示例 -

phoneNum += charToNum(char) 
+0

爲什麼phoneNum = charToNum(char)+ phoneNum不同於phoneNum = phoneNum + charToNum(char)?不增加是否遵循交換性質? – Nocturne

+1

對於字符串'+'運算符表示串聯,並且不可交換。 'AB'與'BA'不一樣,是嗎? –

0

首先改變phoneNum = charToNum(char) + phoneNumphoneNum += charToNum(char)並在charToNum功能在頂部增加一個if條件返回1num1

0
import re 


def charToNum(num): 
    if num in ['1', '0']: 
     return num 
    elif num in ['A', 'B', 'C', '2']: 
     return '2' 
    elif num in ['D', 'E', 'F', '3']: 
     return '3' 
    elif num in ['G', 'H', 'I', '4']: 
     return '4' 
    elif num in ['J', 'K', 'L', '5']: 
     return '5' 
    elif num in ['M', 'N', 'O', '6']: 
     return '6' 
    elif num in ['P', 'Q', 'R', 'S', '7']: 
     return '7' 
    elif num in ['T', 'U', 'V', '8']: 
     return '8' 
    elif num in ['W', 'X', 'Y', 'Z', '9']: 
     return '9' 


def AlphaToTel(telNum): 
    telNum = re.findall('(\w)', telNum) 
    phoneNum = [charToNum(x) for x in telNum] 
    print(''.join(phoneNum)) 


if __name__ == '__main__': 
    AlphaToTel("521-BBB-BBBB")