本帖最后由 sunrise085 于 2020-10-9 21:23 编辑
首先,你的程序中有个大问题,就是第一个elif和第三个elif后面的范围写错了,你写那个范围值包含两个字符而不是三个字符
下面这个程序解决你现有的问题text='''引用的string2'''
length = len(text)
for i in range(length):
if (i+8) <= length:
if text[i].islower() is False:
continue
elif text[(i+1):(i+4)].isupper() is False:
continue
elif text[i+4].islower() is False:
continue
elif text[(i+5):(i+8)].isupper() is False:
continue
elif text[i+8].islower() is True:
print(text[i+4],end='')
其次,你的逻辑上是有瑕疵的,对字符串的首尾两端段不够准确。例如:text='''ABCdEFGhijk''' 这个字符串中的d是符合条件的,但是你的程序是检索不出来这个d的;再例如:text='''abcDEFgHIJ''' 这个这个g是符合条件的,但是当读到c的时候,i的值为2,此时i+8为10刚好等于length,然后到最后一个elif的时候,text[i+8]是text[10]这是不存在的,会报错下标溢出
下面帮你解决这个逻辑问题text = '''引用的string2'''
length = len(text)
for i in range(length-8):#for循环范围缩小一点,里面就不用判断i+8<length的问题了
if i!=0:#这个解决开头的问题
if not text[i].islower():
continue
else:
i-=1
if not text[(i+1):(i+4)].isupper():
continue
if not text[i+4].islower():
continue
if not text[(i+5):(i+8)].isupper():
continue
if text[i+8].islower():
print(text[i+4],end='')
i+=1 #后面这三行解决末尾问题
if text[i].islower() and text[(i+1):(i+4)].isupper() and text[i+4].islower() and text[(i+5):(i+8)].isupper():
print(text[i+4])
|