pejayang 发表于 2020-10-9 16:04:01

第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”。
求助

Dragon.水魅 发表于 2020-10-9 19:43:33

建议把原题贴上来{:10_266:}

sunrise085 发表于 2020-10-9 21:08:44

本帖最后由 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)

pejayang 发表于 2020-10-10 08:33:28

sunrise085 发表于 2020-10-9 21:08
首先,你的程序中有个大问题,就是第一个elif和第三个elif后面的范围写错了,你写那个范围值包含两个字符而 ...

非常感谢!
第一部分明白了,确实是范围搞错了。不过我新代码给出的答案是“uilovefisdhc”,还是差一点。
第二部分升级后的代码我一会儿看看,又不会的还请多指教。
总之十分感谢!
页: [1]
查看完整版本: 第20讲动动手第二道题