Python字符串逻辑错误

时间:2015-10-07 01:37:44

标签: python string

我目前正在创建一个程序,显示电话号码,其中任何字母字符出现在原件中,并翻译成等效字母。例如,如果我要输入字符串" 521-BBB-BBBB",我应该得到" 5212222222"根据我的代码。相反,我得到了" 2222222925"来自IDLE。我不明白为什么程序会显示这个而不是我想要的那个。 " 2"的数量是正确的,但我不明白" 925"来自。

这是代码:

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&#34)

3 个答案:

答案 0 :(得分:0)

出现此问题的原因是charToNum()函数的定义方式(以及您将结果添加到phoneNum的原因)。

首先,您没有考虑1中的charToNum()号码,因此您将9返回1。如果1num,您应该考虑并返回1

其次,您将phoneNum添加为 -

phoneNum = charToNum(char) + phoneNum

这会不断将新字符添加到字符串的开头,因此您可以反向获取电话号码。如果您希望输出类似于 - "5212222222"。您需要以正确的顺序(phoneNum + charToNum(char))添加或使用(+=)。示例 -

phoneNum += charToNum(char)

答案 1 :(得分:0)

首先将phoneNum = charToNum(char) + phoneNum更改为phoneNum += charToNum(char),然后在charToNum函数中在顶部添加一个if条件,以便在1时返回num1

答案 2 :(得分: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")