第20讲动动手第二道题
本帖最后由 pejayang 于 2020-10-9 16:58 编辑这个题没有做对,一直也想不明白。
题干里说“位密码的左右两边均有且只有三个大写字母”,那就说明密码前面和后面的3个字母是大写,而前面第4个和后面第4个是小写。这么理解没错吧?
所以我的代码是text='''引用的string2'''
length = len(text)
for i in range(length):
if (i+8) <= length:
if text.islower() is False:
continue
elif text[(i+1):(i+3)].isupper() is False:
continue
elif text.islower() is False:
continue
elif text[(i+5):(i+7)].isupper() is False:
continue
elif text.islower() is True:
print(text,end='')
这样做出来得到的结果是“aqrjauisoalbkcthzovqemmfbtenifpdwizoodzvhayasnouxdrazvzfhclhyqxurneznccoau”。
求助 建议把原题贴上来{:10_266:} 本帖最后由 sunrise085 于 2020-10-9 21:23 编辑
首先,你的程序中有个大问题,就是第一个elif和第三个elif后面的范围写错了,你写那个范围值包含两个字符而不是三个字符
下面这个程序解决你现有的问题
text='''引用的string2'''
length = len(text)
for i in range(length):
if (i+8) <= length:
if text.islower() is False:
continue
elif text[(i+1):(i+4)].isupper() is False:
continue
elif text.islower() is False:
continue
elif text[(i+5):(i+8)].isupper() is False:
continue
elif text.islower() is True:
print(text,end='')
其次,你的逻辑上是有瑕疵的,对字符串的首尾两端段不够准确。例如:text='''ABCdEFGhijk''' 这个字符串中的d是符合条件的,但是你的程序是检索不出来这个d的;再例如:text='''abcDEFgHIJ''' 这个这个g是符合条件的,但是当读到c的时候,i的值为2,此时i+8为10刚好等于length,然后到最后一个elif的时候,text是text这是不存在的,会报错下标溢出
下面帮你解决这个逻辑问题
text = '''引用的string2'''
length = len(text)
for i in range(length-8):#for循环范围缩小一点,里面就不用判断i+8<length的问题了
if i!=0:#这个解决开头的问题
if not text.islower():
continue
else:
i-=1
if not text[(i+1):(i+4)].isupper():
continue
if not text.islower():
continue
if not text[(i+5):(i+8)].isupper():
continue
if text.islower():
print(text,end='')
i+=1#后面这三行解决末尾问题
if text.islower() and text[(i+1):(i+4)].isupper() and text.islower() and text[(i+5):(i+8)].isupper():
print(text) sunrise085 发表于 2020-10-9 21:08
首先,你的程序中有个大问题,就是第一个elif和第三个elif后面的范围写错了,你写那个范围值包含两个字符而 ...
非常感谢!
第一部分明白了,确实是范围搞错了。不过我新代码给出的答案是“uilovefisdhc”,还是差一点。
第二部分升级后的代码我一会儿看看,又不会的还请多指教。
总之十分感谢!
页:
[1]