鱼C论坛

 找回密码
 立即注册
查看: 1827|回复: 3

[已解决]第20讲动动手第二道题

[复制链接]
发表于 2020-10-9 16:04:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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[i].islower() is False:
            continue
        elif text[(i+1):(i+3)].isupper() is False:
            continue
        elif text[i+4].islower() is False:
            continue
        elif text[(i+5):(i+7)].isupper() is False:
            continue
        elif text[i+8].islower() is True:
            print(text[i+4],end='')

这样做出来得到的结果是“aqrjauisoalbkcthzovqemmfbtenifpdwizoodzvhayasnouxdrazvzfhclhyqxurneznccoau”。
求助
最佳答案
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[i].islower() is False:
            continue
        elif text[(i+1):(i+4)].isupper() is False:
            continue
        elif text[i+4].islower() is False:
            continue
        elif text[(i+5):(i+8)].isupper() is False:
            continue
        elif text[i+8].islower() is True:
            print(text[i+4],end='')
其次,你的逻辑上是有瑕疵的,对字符串的首尾两端段不够准确。例如:text='''ABCdEFGhijk''' 这个字符串中的d是符合条件的,但是你的程序是检索不出来这个d的;再例如:text='''abcDEFgHIJ''' 这个这个g是符合条件的,但是当读到c的时候,i的值为2,此时i+8为10刚好等于length,然后到最后一个elif的时候,text[i+8]是text[10]这是不存在的,会报错下标溢出
下面帮你解决这个逻辑问题
text = '''引用的string2'''

length = len(text)
for i in range(length-8):#for循环范围缩小一点,里面就不用判断i+8<length的问题了
    if i!=0:#这个解决开头的问题
        if not text[i].islower():
            continue
    else:
        i-=1
    if not text[(i+1):(i+4)].isupper():
        continue
    if not text[i+4].islower():
        continue
    if not text[(i+5):(i+8)].isupper():
        continue
    if text[i+8].islower():
        print(text[i+4],end='')
i+=1  #后面这三行解决末尾问题
if text[i].islower() and text[(i+1):(i+4)].isupper() and text[i+4].islower() and text[(i+5):(i+8)].isupper():
    print(text[i+4])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-9 19:43:33 | 显示全部楼层
建议把原题贴上来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[i].islower() is False:
            continue
        elif text[(i+1):(i+4)].isupper() is False:
            continue
        elif text[i+4].islower() is False:
            continue
        elif text[(i+5):(i+8)].isupper() is False:
            continue
        elif text[i+8].islower() is True:
            print(text[i+4],end='')
其次,你的逻辑上是有瑕疵的,对字符串的首尾两端段不够准确。例如:text='''ABCdEFGhijk''' 这个字符串中的d是符合条件的,但是你的程序是检索不出来这个d的;再例如:text='''abcDEFgHIJ''' 这个这个g是符合条件的,但是当读到c的时候,i的值为2,此时i+8为10刚好等于length,然后到最后一个elif的时候,text[i+8]是text[10]这是不存在的,会报错下标溢出
下面帮你解决这个逻辑问题
text = '''引用的string2'''

length = len(text)
for i in range(length-8):#for循环范围缩小一点,里面就不用判断i+8<length的问题了
    if i!=0:#这个解决开头的问题
        if not text[i].islower():
            continue
    else:
        i-=1
    if not text[(i+1):(i+4)].isupper():
        continue
    if not text[i+4].islower():
        continue
    if not text[(i+5):(i+8)].isupper():
        continue
    if text[i+8].islower():
        print(text[i+4],end='')
i+=1  #后面这三行解决末尾问题
if text[i].islower() and text[(i+1):(i+4)].isupper() and text[i+4].islower() and text[(i+5):(i+8)].isupper():
    print(text[i+4])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

非常感谢!
第一部分明白了,确实是范围搞错了。不过我新代码给出的答案是“uilovefisdhc”,还是差一点。
第二部分升级后的代码我一会儿看看,又不会的还请多指教。
总之十分感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-18 09:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表