本帖最后由 txxcat 于 2020-3-13 15:22 编辑 
你的代码的问题是"a = str1.find(each)"这行,你要获取小写字母的位置,可是一个小写字母会重复出现若干次,而a只是第一个小写字母的位置,所以不可能出答案,其实获得字母的位置很简单,利用计数器,每次迭代加1,a就是真实的位置了。
- str1 = ('''xhstMWpHdZzqeEnttlAHiWbhbIJpwKBAGsFWthBiwBDKTFzIUamELZJFLbmqOmwBIYBJIofAUyxTLUEm
 - LcOXzjIHFcfUfEWccbWzhVuIZMdTVsOaNsLTpHjrvFaYTnJUrqaYnUmbobfOXXtkjKjFUEhVNlPWeaIY
 - uABNuEDKFWiUaqQiBHGsgEmDSKiJKLkkzFWlobXIyUlDzGcwDnEOwwWxgFpebsslmKItazIYctPROSJp''')
 - list1 = []
 - list2 = list(str1)
 - a=0   #增加这行
 - for each in list2:
 -     if each.islower():
 - #        a = str1.find(each)   #删除这行
 -         if str1[(a-3):a].isupper():
 -             if str1[(a+1):(a+4)].isupper():
 -                 if not str1[a-4].isupper():
 -                     if not str1[a+4].isupper():
 -                         print(a,each)
 -                         list1.append(each)
 -     a+=1    #增加这行
 - list3 = str(list1)
 - print(list3)
 
 复制代码
加了2行,删除1行就可以运行了,但是答案多了一个字母,是受到了'\n'的干扰,你把isupper的检查换成依次检查每个字母而不是检查3个字母的字符串就可以排除这个干扰了。