本帖最后由 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])
复制代码