python字符串中出现意外的null.isalpha()

python字符串中出现意外的null.isalpha(),python,Python,函数应该将句子改为用空格分隔的单词列表,然后检查一行中是否有3个单词只包含字母 def words(str): slowa = str.split(str) if len(slowa) < 2: return 0 else: for x in range(2,len(slowa)): if slowa[x].isalpha() and slowa[x-1].isalpha() and slowa[x-2].isalpha(): ret

函数应该将句子改为用空格分隔的单词列表,然后检查一行中是否有3个单词只包含字母

def words(str):
slowa = str.split(str)
if len(slowa) < 2:
    return 0
else:
    for x in range(2,len(slowa)):
        if slowa[x].isalpha() and slowa[x-1].isalpha() and slowa[x-2].isalpha():
            return 1
        else:
            return 0
fe:wordsone返回true

但是wordsone1返回false。 出现这种情况的任何提示?

因为在循环中第一次失败的测试中返回0。循环以返回退出,但您从未测试过列表的其余部分。一个1不匹配,需要继续循环,直到稍后找到一个序列

将返回0移动到for循环之后,只有在测试了所有位置后才能确定没有匹配项:

for x in range(2,len(slowa)):
    if slowa[x].isalpha() and slowa[x-1].isalpha() and slowa[x-2].isalpha():
        return 1

return 0
请注意,长度测试是多余的;对于较短的序列,范围仅为空:

def words(inputstring):
    slowa = inputstring.split()
    for x in range(2, len(slowa)):
        if slowa[x].isalpha() and slowa[x-1].isalpha() and slowa[x-2].isalpha():
            return 1
    return 0
因为在循环的第一个测试中返回0。循环以返回退出,但您从未测试过列表的其余部分。一个1不匹配,需要继续循环,直到稍后找到一个序列。