Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python字符串逻辑错误_Python_String - Fatal编程技术网

Python字符串逻辑错误

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'

我目前正在创建一个程序,显示电话号码和任何字母字符,出现在原来的翻译成他们的等价物。例如,如果输入字符串“521-BBB-BBBB”,则应根据代码获得“5212222222”。相反,我从IDLE得到了“222222925”。我不明白为什么节目显示的是这个而不是我要找的那个。“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)
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")