|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 自然水 于 2017-4-20 12:01 编辑
- countA = 0 # 统计前边的大写字母个数
- countB = 0 # 统计小写字母个数
- countC = 0 # 统计后边的大写字母个数
- length = len(str1)
- for i in range(length):
- if str1[i] == '\n':
- continue
- if str1[i].isupper(): #如果当前字母是大写
- if countB: #如果countB存在小写
- countC += 1 #countC 加1
- else: #反之(countB还不存在)
- countC = 0 #重置countC
- countA += 1 #countA 加1
-
- if str1[i].islower(): #如果当前字符为小写
- if countA != 3: #判断countA 是否已经达到3个大写
- countA = 0 #不符合条件,则重置所有计数
- countB = 0
- countC = 0
- else: #如果countA满足 等于3的条件
- if countB: #如果 countB 不为0 (已经有一个小写了)
- countA = 0 #不符合条件,重置所有计数
- countB = 0
- countC = 0
- else: #如果 countB 还是0 (没小写数值)
- countB = 1 #将countB 赋值为1,代表 3,1结构已经达成
- countC = 0 #重置countC数值,开始计算它是否符合3的条件
- target = i #新变量存储当前i的索引值
- """
- 以上结构用于计算 countA 是否为3,countB是否为1,并开始统计countC的数值
- """
- if countA == 3 and countC == 3: #如果 countA和countC都是3个大写字母
- if i+1 != length and str1[i+1].isupper():
- #且当前i的下一位不是字符串最大长度(确保i下位存在,length比实际存在的索引值大1)
- #且i+1下个字母不为大写,防止314结构出现。
- countB = 0
- countC = 0
- else: #没碰到以上情况,输出存储在变量中的字母
- print(str1[target], end='')
- countA = 3
- countB = 0
- countC = 0
复制代码
答案我按照自己理解,写的注释:
疑问在于:
if countA == 3 and countC == 3:
if i+1 != length and str1[i+1].isupper():
countB = 0
countC = 0
#当A,C都为3的时候
#且当前i的下一位不是字符串最大长度(确保i下位存在,length比实际存在的索引值大1)
#且i+1下个字母不为大写,防止314结构出现。
i+1 != length 这条存在的必要性? length必然比str1最大索引值大1,我明白。 但是必要性有么?
从程序上看,必然会执行到 str1[length] ,超出最大索引值。 好像也没报错啊, 还是说 i+1 != length ,只是为了保证这个字符是“存在的”,让and后的 str1[i+1].isupper() 可以成立?
|
|