Python字符串逻辑错误
我目前正在创建一个程序,显示电话号码和任何字母字符,出现在原来的翻译成他们的等价物。例如,如果输入字符串“521-BBB-BBBB”,则应根据代码获得“5212222222”。相反,我从IDLE得到了“222222925”。我不明白为什么节目显示的是这个而不是我要找的那个。“2”的数字是正确的,但我不明白“925”是从哪里来的 代码如下:Python字符串逻辑错误,python,string,Python,String,我目前正在创建一个程序,显示电话号码和任何字母字符,出现在原来的翻译成他们的等价物。例如,如果输入字符串“521-BBB-BBBB”,则应根据代码获得“5212222222”。相反,我从IDLE得到了“222222925”。我不明白为什么节目显示的是这个而不是我要找的那个。“2”的数字是正确的,但我不明白“925”是从哪里来的 代码如下: def charToNum(num): if num == 'A' or num == 'B' or num == 'C' or num == '2'
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)
def charToNum(num):
如果num='A'或num='B'或num='C'或num='2':
返回“2”
elif num=='D'或num=='E'或num=='F'或num=='3':
返回'3'
elif num=='G'或num=='H'或num=='I'或num=='4':
返回'4'
elif num=='J'或num=='K'或num=='L'或num=='5':
返回'5'
elif num=='M'或num=='N'或num=='O'或num=='6':
返回'6'
elif num=='P'或num=='Q'或num=='R'或num=='S'或num=='7':
返回'7'
elif num=='T'或num=='U'或num=='V'或num=='8':
返回'8'
其他:
返回'9'
def AlphaToTel(telNum):
newTelNum=telNum[0:3]+telNum[4:7]+telNum[8:12]
phoneNum=“”
对于newTelNum中的char:
phoneNum=charToNum(char)+phoneNum
打印(phoneNum)
AlphaToTel(“521-BBB-BBBB”)发生此问题的原因是如何定义
charToNum()
函数(以及如何将结果添加到phoneNum
)
首先,您没有考虑charToNum()
中的数字1
,因此返回9
以获取1
。您应该考虑并返回<代码> 1 <代码>,如果<代码> Num < /C> > <代码> 1 < /C> > < /P>
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")
其次,您要添加phoneNum的as-
phoneNum = charToNum(char) + phoneNum
这会将新字符不断添加到字符串的开头,因此您会得到相反的电话号码。如果希望输出类似于-“521222222”
。您需要按正确的顺序添加它(phoneNum+charToNum(char)
)或使用(+=
)。范例-
phoneNum += charToNum(char)
出现此问题的原因是如何定义
charToNum()
函数(以及如何将结果添加到phoneNum
)
首先,您没有考虑charToNum()
中的数字1
,因此返回9
以获取1
。您应该考虑并返回<代码> 1 <代码>,如果<代码> Num < /C> > <代码> 1 < /C> > < /P>
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")
其次,您要添加phoneNum的as-
phoneNum = charToNum(char) + phoneNum
这会将新字符不断添加到字符串的开头,因此您会得到相反的电话号码。如果希望输出类似于-“521222222”
。您需要按正确的顺序添加它(phoneNum+charToNum(char)
)或使用(+=
)。范例-
phoneNum += charToNum(char)
首先将
phoneNum=charToNum(char)+phoneNum
更改为phoneNum+=charToNum(char)
,并在charToNum
函数的顶部添加一个if
条件,以在num
为1
时返回1
charToNum(char)+phoneNum到phoneNum+=charToNum(char)
并且在charToNum
函数的顶部添加一个if
条件,当num
为1
时,返回1
,因此当您输入数字“1”时,它最终返回9。此外,您可能需要phoneNum=phoneNum+charToNum(char)
,而不是phoneNum=phoneNum+charToNum(char)
。这应该可以解决您的问题:)您在任何地方都无法处理数字“1”,因此当您输入它时,它最终返回9。此外,您可能需要phoneNum=phoneNum+charToNum(char)
,而不是phoneNum=phoneNum+charToNum(char)
。这应该可以解决您的问题:)为什么phoneNum=charToNum(char)+phoneNum与phoneNum=phoneNum+charToNum(char)不同?加法不遵循交换属性吗?对于字符串+
运算符意味着串联,而这不是交换的AB
与BA
不同,是吗?为什么phoneNum=charToNum(char)+phoneNum与phoneNum=phoneNum+charToNum(char)不同?加法不遵循交换属性吗?对于字符串+
运算符意味着串联,而这不是交换的AB
与BA
不同,是吗?
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")