第二十课密码问题
本帖最后由 yjptx121 于 2020-1-16 23:20 编辑对代码做了分析,但发现运行结果仍然不对,请高人指点:'''请用已学过的知识编写程序,找出小甲鱼藏在下边这个长字符中的密码,密码的埋藏点符合以下规律:
a)每位密码为单个小写宇母
b)每位密码的左右两边均有且只有三个大写宇母'''
str1='ABSsaDKSbRIHcRHGcdDIF'
countA = 0 #用来判断左边大写字母
countB = 0 #用来统计小写字母
countC = 0 #用来判断右边大写字母
length = len(str1)
for i in range(length):
if str1 == '\n': #转义字符:换行,即除非不为\n,那么程序才会往下执行(条件1)
continue
if str1.isupper(): #如果str1为大写(条件2)
if countB == 1: #如果小写计数countB == 1(条件3)
countC += 1 #此时countC 是代表右边大写字母数+1
countA = 0 #左边大写字母数清0,
else: #(条件4)
countA += 1 #执行
continue #跳过后续,继续执行if str1.isupper()程序
if str1.islower() and countA == 3:#需同时满足当前字符为小写,大写字符总共3个(条件5)
countB = 1
countA = 0
target = i #输出值
continue
if str1.islower() and countC == 3: #(条件6)
print(str1,end = '')
countA = 0
countB = 0
countC = 0
'''ABS均执行条件4 输出完后 A=0 B=3 C=0,到s时执行条件5 输出A=1 B=1 C=0,到a时所有条件均不满足,所以对A,B,C重新赋值
为0,同样,DKS均执行条件4,输出完成后 A=0 B=3 C=0,到b时执行条件5,输出A=1 B=1 C=0,并赋值target = 8,RIH 执行完条件3
后得到A=1 B=3 C=3 ,到c时执行条件6,因为c是小写且C=3了,此时target=8未改变,因此会打印b,程序继续执行,对A,B,C均进行
初始化赋值,开始新的一轮循环...'''
最终输出值就只有b,c就不见了 本帖最后由 jackz007 于 2020-1-17 01:09 编辑
请注意这个条件:
b)每位密码的左右两边均有且只有三个大写宇母。
这个条件的意思是,密码字符前后如果有第 4 个字符,那就一定是小写字符,所以,判断的范围应该是密码字符前后各 4 个字符,显然,有且只有三个大写字符的条件针对的是 str1 的开头和结尾,这又这两个地方缺少第 4 个字符。所以,需要为 str1 的首尾各添加一个小写字符,这样,就不用单独处理字符串的首尾了。
str1 = 'ABSsaDKSbRIHcRHGcdDIF'
s = 'a' + '' . join(str1 . split('\n')) + 'a'
p = ''
for k in range(4 , len(s) - 4) :
if s . islower() and s . isupper() and s . islower() and s . isupper() and s . islower():
p += s
print(p)
运行实况:
C:\Bin>python x.py
bc
C:\Bin>
即便用小甲鱼保存在文件中的长字符串来替换 str1 也可以得到正确的隐藏密码。 jackz007 发表于 2020-1-17 01:04
请注意这个条件:
b)每位密码的左右两边均有且只有三个大写宇母。
这个条件的 ...
多谢回答,我也知道所有的问题不可能只有一个答案,只看能否想到而已,受教了
页:
[1]