最佳答案似乎有个小问题:如果i-4<0,或者i+4=length无法检测。
比如说,如果str1='ABCdEFG',按照str1[i-4].islower()是检测不到的。
所以,更复杂点,还得分类讨论i的取值:
这是我写的:length = len(str1)
for each in range(3, length-3):
flag = 0 #定义一个标量标志
if str1[each] == '\n':
continue
elif str1[each].islower():
if each == 3: #each==3,即前边只有三个字母
if str1[each+4].isupper(): #判断后边第四个字母
continue #如果第四个字母是大写,不符合题意,跳过后面进入下一轮循环
else:
for ea_ch in (str1[each-3:each] + str1[each+1:each+4]):
if not ea_ch.isupper():
flag = 1
break #用break,因为不用再判断其余前后三个字母,跳出上一级for循环
elif each == length-4: #即后面只有三个字母
if str1[each-4].isupper(): #判断前面第四个字母
continue
else:
for ea_ch in (str1[each-3:each] + str1[each+1:each+4]):
if not ea_ch.isupper():
flag = 1
break
else:
if (str1[each-4].isupper()) or (str1[each+4].isupper()):
continue
else:
for ea_ch in (str1[each-3:each] + str1[each+1:each+4]):
if not ea_ch.isupper():
flag = 1
break
if flag == 0: #最后判断flag值是否改变
print(str1[each], end='')
如果有问题欢迎指正!
|