马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 WilsonWolf2333 于 2020-12-8 16:49 编辑
题目:
1. 请用已学过的知识编写程序,找出小甲鱼藏在下边这个长字符串中的密码,密码的埋藏点符合以下规律:
a) 每位密码为单个小写字母
b) 每位密码的左右两边均有且只有三个大写字母
我的疑问是:
1.完全无法理解答案的思路,怎么想出来的,尝试理顺答案思路时就抓狂 。我尝试给答案加了注释,但还是无法理解答案的思路
2.请大神看看我这个想法对不: 这道题的思路就类似于 - 想象成有这么一个小机器,一个一个检测长字符串中的字母,每到一个字母,
就根据它的内部程序判断此字母是否符合题目要求,符合的就打印出来
上述1.展开如下
1.我对代码加的注释str1 = '''ABCdEfGHIjKLMnOPQrSTU'''
countA = 0 # 统计前边的大写字母
countB = 0 # 统计小写字母
countC = 0 # 统计后边的大写字母
length = len(str1)
for i in range(length):
if str1[i] == '\n':
continue
# 当轮到某个大写字母时,分两种情况,
# 1.到此已经有了小写字母,
# 那么统计后面大写字母的计数器C+1;
# 2.如果到此时还没出现小写字母,
# 那么统计前面大写字母的计数器A+1
if str1[i].isupper():
if countB:
countC += 1
else:
countC = 0
countA += 1
# 当轮到某个小写字母时,分两种情况,
# 1.如果前面的大写字母数量不为3
# 那么ABC归零
# 2.如果此时前面有三个大写字母,这里又分为三种情况
# a.如果此时存在小写字母
# 那么ABC归零
# b.如果此时没有小写字母
# 那么小写字母数量统计记为1
# 后面大写字母数量统计记为0
# 记录此时i值
if str1[i].islower():
if countA != 3:
countA = 0
countB = 0
countC = 0
else:
if countB:
countA = 0
countB = 0
countC = 0
else:
countB = 1
countC = 0
target = i
# 如果AC同时为3,分为两种情况,
# 1.如果此时不是统计的最后一位,并且 下一位字母为大写
# 那么BC归零
# 2.如果统计的是最后一位 或者 下一位字母是小写
# 那么符合条件打印出密码
# 同时前面大写字母计数为3,B归零
if countA == 3 and countC == 3:
if i+1 != length and str1[i+1].isupper():
countB = 0
countC = 0
else:
print(str1[target], end='')
countA = 3
countB = 0
countC = 0
另外,3.(吐槽,唠叨)
我尝试按照分别判断countA, countB, countC的顺序来理顺思路,写出的注释代码如下,但是然并卵,对我理解答案思路没有帮助,抓狂*2 '''
A B C d E f G H I j K L M n O P Q r S T U
针对于A的代码有:
如果检测到了大写字母
如果此时没有小写字母
那么A值加一
如果检测到了小写字母
如果此时前面大写字母的数量不为三
那么A值归零
如果此时前面大写字母数量恰好为三
如果此时已经有小写字母
那么A值归零
如果前后大写字母数量此时都恰好为三
如果 此时是最后一位字母 或者 下一位是小写字母
那么符合条件
A值重新赋值为三
'''
'''
针对于B的代码有:
如果检测到了小写字母
如果此时前面大写字母数量不为三
那么B值归零
如果此时前面大写字母数量恰好为三
如果此时已经有了小写字母
那么B值归零
如果此时还没有小写字母
那么B值为1
如果恰好前后大写字母数量都为三
如果此时不是最后一位字母 同时 如果下一位是大写字母
那么B值归零
如果 此时是最后一位字母 或者 下一位是小写字母
此时符合条件
然后B值归零
'''
'''
针对于C的代码有:
如果检测到大写字母
如果此时已有小写字母
那么C值加一
如果此时没有小写字母
那么C值为零
如果检测到小写字母
如果已有的前面大写字母数量不为3
那么C值为零
如果此时前面大写字母恰好为3
如果此时也有小写字母了
那么C值为零
如果此时没有小写字母
那么C值为零
如果此时前后大写字母都有3个了
如果此时不是最后一位字母 同时 如果下一位是大写字母
那么C值归零
如果 此时是最后一位字母 或者 下一位是小写字母
那么符合条件
然后C值归零
'''
P.S. 这道题已经卡住我2周了,原打算按
‘a.自己解
b.分析答案
c.默敲代码
d.对比自己代码 & 知识点复盘
’这个顺序来做这道题,结果发现b.分析答案这步骤完全过不了。。
尝试百度和论坛里搜索和这道题相关的文章,但是没有找到对我帮助太大的。
请路过的大神不吝赐教,就是想不明白。。。
WilsonWolf2333 发表于 2020-12-9 08:10
感谢回复! 我昨天继续按原答案的注释捋了一下,发现比之前更能看懂一点点了。一直有个疑问,小甲鱼怎么 ...
理解不了可以缓一缓先,题目本意是助于理解,说不定什么时候想起来还有这个题再看时就豁然开朗了
|