我目前正在创建一个程序,显示电话号码,其中任何字母字符出现在原件中,并翻译成等效字母。例如,如果我要输入字符串" 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)
答案 0 :(得分:0)
出现此问题的原因是charToNum()
函数的定义方式(以及您将结果添加到phoneNum
的原因)。
首先,您没有考虑1
中的charToNum()
号码,因此您将9
返回1
。如果1
为num
,您应该考虑并返回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
时返回num
是1
。
答案 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")