我有这个函数来检查字符串是否包含三个或更多小写字母。
def lowerCaseValid(word):
lowCharList = ['abcdefghijklmnopqrstuvwxyz']
i = 0
flag = 0
while i <= len(word):
j = 0
while j <= len(lowCharList):
if lowCharList[j] == word[i]:
flag += 1
j = 0
else:
j += 1
i += 1
if flag >= 3:
return True
简单来说,我传入一个字符串(word)并创建一个可接受字符列表(lowCharList)。
然后,我设置了一个嵌套的while循环,它在lowCharList的每个索引处检查word [i],直到找到匹配。
然后它重置lowCharList计数器并向flag添加1,然后移到word [i + 1]。
如果它在到达z时没有找到匹配,那么无论如何它都会移动到单词[i + 1]。
出于某种原因,为什么我在主函数中尝试输入样本。
def main():
word = 'corRe!33'
print(lowerCaseValid(word))
我收到此错误:
in lowerCaseValid
if lowCharList[j] == word[i]:
IndexError: list index out of range
为什么会抛出此错误?谢谢。
答案 0 :(得分:1)
在运算符中使用python&#39;更容易......
def lowerCaseValid(word):
cnt = 0
lowCharList = ['abcdefghijklmnopqrstuvwxyz']
chars = lowCharList.pop ()
for ch in word:
if ch in chars:
cnt += 1
return cnt >= 3
或使用只设置2行代码
def lowerCaseValid(word):
lowCharList = ['abcdefghijklmnopqrstuvwxyz']
return len(set(lowCharList.pop()) & set(word)) >=3
或带有map和lambda的一个班轮
def lowerCaseValid(word):
return len(list(map(lambda x: x.islower, list(word)))) >=3
答案 1 :(得分:0)
更改
lowCharList = ['abcdefghijklmnopqrstuvwxyz']
到
lowCharList = list('abcdefghijklmnopqrstuvwxyz')
我相信这应该会有所帮助,因为你有一个只包含1个项目的列表,这样就可以创建一个包含24个项目(所有不同字母)的列表。
答案 2 :(得分:0)
正如heemayl在评论中指出的那样,lowCharList
长达1个元素!现在你有两个选择:使lowCharList成为一个实际的列表(lowCharList = list ("abcd...")
),或者保持lowCharList
一个字符串,这将正常工作(删除定义中的括号。
我可以建议另一种方法:检查str.islower count是否加起来> = 3。所以:
lower_count = 0
for letter in word:
if letter.islower(): lower_count += 1
if lower_count >= 3: return True
另外,正如评论中所建议的那样:
return len ([letter for letter in word if letter.islower()]) >= 3
会起作用(比我的答案更好,这只是它的扩展形式)