## 第三关:
第三题地址:[http://www.pythonchallenge.com/pc/def/equality.html](http://www.pythonchallenge.com/pc/def/equality.html)<br>
![](https://img.kancloud.cn/ec/eb/eceb3a9548ac8f8da5f090f0f63aec7a_685x516.png)<br>
下面的提示,翻译过来就是:**一个小字母,两边正好有三个大保镖**我的理解是:一个小写字母左边有三个大写字母,右边有三个大写字母
参考上一题,还是找网页源代码
![](https://img.kancloud.cn/f4/ff/f4ffd000e5eb99bb713dd81eb1c2624b_1303x577.png)
# **解题代码:**
```
# 目标:一个小写字母旁边有是三个大写字母
# 定为小写字母:ascii值97-122
# 定位大写字符:ascii值65-90
# 大概思路,for循环遍历每一个小写字母,在判断其左三个字符,右三个字符(正好左三个,右三个,没有第四个)
str_text = "源代码里面的字符太长了,这里不粘贴了,你们自己复制吧!"
new_str_text = "" # 一个空的字符,代表所有小写字符的集合
list_new_str_text = list(new_str_text) # 转换为列表
end_text = "" # 一个空字符,代表最终所有满足条件的小写字符
list_end_text = list(end_text) # 转换为列表
print(len(str_text)) # 十万个字符,这人真狠!
for i in range(len(str_text)): # 字符串第一个是零,此时的i就是字符串的下标位置
# print(i)
# 从第四个(下标3)(含)开始,判断到倒数四个(下标len()-1-3)(含)
# 判断其左三个字符都是大写字符,且右边三个字符都是大写字符
if 97 <= ord(str_text[i]) <= 122: # 筛选出来小写字符
# print(i) # 所有小写字符的位置全部输出,这个创建一个列表,直接判断这个列表
list_new_str_text.append(i) # 新的列表,包含所有小写字符的位置(下标)
print(list_new_str_text) # 新的列表,包含所有小写字符的位置(下标)
for a in list_new_str_text: # a:每个小写字符在原字符串中的位置
# print(a)
if 3 <= a <= (len(str_text) - 4): # 筛选掉两边的六个(无法处理,也不会是两边的六个)
# print(a)
# 下面开始判断 a左三个,右三个都是大写字符
if 65 <= ord(str_text[a - 3]) <= 90:
# print(str_text[a] + '左边第三个是大写字符')
if 65 <= ord(str_text[a - 2]) <= 90:
# print(str_text[a] + '左边第二个是大写字符,且左边第三个是大写字符')
if 65 <= ord(str_text[a - 1]) <= 90:
print(str_text[a] + '左边第一个是大写字符,且左边第二个是大写字符,且左边第一个是大写字符')
# TODO 最后在判断一下,左边第四个不是大写字符
if (97 <= ord(str_text[a - 4]) <= 122):
print(str_text[a] + '左边第一个是大写字符,且左边第二个是大写字符,且左边第一个是大写字符,且左边第四个是小写字符')
if 65 <= ord(str_text[a + 3]) <= 90:
# print(str_text[a] + '右边第三个是大写字符')
if 65 <= ord(str_text[a + 2]) <= 90:
# print(str_text[a] + '右边第二个是大写字符,且右边第三个是大写字符')
if 65 <= ord(str_text[a + 1]) <= 90:
# print(str_text[a] + '右边第一个是大写字符,且右边第二个是大写字符,且右边第三个是大写字符')
if (97 <= ord(str_text[a + 4]) <= 122):
print(str_text[a] + '右边第一个是大写字符,且右边第二个是大写字符,且右边第一个是大写字符,且右边第四个是小写字符')
list_end_text.append(str_text[a])
print(list_end_text)
print("".join(list_end_text))
# linkedlist
```
代码还有很大的改动空间,想那个那么多层的if循环可以简化一些,我这里懒得改了,能过关就行了!