鱼C论坛

 找回密码
 立即注册
查看: 1442|回复: 4

[已解决]课后练习21【寻找密码】求解

[复制链接]
发表于 2017-11-12 22:07:14 | 显示全部楼层 |阅读模式

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

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

x
题目:请在字符串中找出密码,密码符合以下规律:
        1.每位密码为单个小写字母;
        2.每位密码字母的左右两边均有且只有3个大写字母
问题:好不容易读懂了大部分代码,但最终运行时没显示结果,究竟是为什么呢?请赐教,感谢!

str1 = '''拷贝AAAiBBkkAAAiBBB究竟是怎样的呢CCCuDDD
看一看'''
countA = 0                 #统计前三个字母为大写时计数
countB = 0                 #满足前三个为大写字母后跳转条件用
countC = 0                #统计后三个字母为大写时计数
length = len(str1)
for i in range(length):
    if str1[i] == '\n':         #换行则重新执行循环
        continue
    if str1[i].isupper():       #字符为大写时执行
        if countB == 1:       #countB为1时统计countC的数量
            countC += 1
            countA = 0
        else:
            countA += 1      #否则重新统计countA的数量
        continue
    if str1[i].islower() and countA == 3:    #字符为小写,且countA为3时执行
        countB = 1
        countA = 0
        target = i
        continue
    if str1[i].islower() and countC == 3:   #字符为小写,且countC为3时执行
        print(str1[target],end='')
    countA = 0  #不符合上述条件时countA,B,C置0
    countB = 0
    countC = 0

附上了注释,感觉没问题啊,但就是打印不了结果:iu  。
希望帮忙看看!
最佳答案
2017-11-12 22:51:40
全部用平行if判定肯定不可能满足条件
因为循环到任意位置的时候,都不知道后面三个字符到底是什么
所以最后的if应该判定i大于等于3 且考察 str1[i-3]字符是否大小写,而且位置也应该放到第一个if后面
修改如下:

  1. str1 = '''拷贝AAAiBBkkAAAiBBB究竟是怎样的呢CCCuDDD
  2. 看一看'''
  3. countA = 0                 #统计前三个字母为大写时计数
  4. countB = 0                 #满足前三个为大写字母后跳转条件用
  5. countC = 0                #统计后三个字母为大写时计数
  6. length = len(str1)

  7. for i in range(length):
  8.     if str1[i] == '\n':         #换行则重新执行循环
  9.         continue
  10.     if str1[i].isupper():       #字符为大写时执行
  11.         if countB == 1:       #countB为1时统计countC的数量
  12.             countC += 1
  13.             countA = 0
  14.             if i > 2 and str1[i-3].islower() and countC == 3:   #字符为小写,且countC为3时执行
  15.                 print(str1[target],end='')
  16.         else:
  17.             countA += 1      #否则重新统计countA的数量
  18.         continue
  19.     if str1[i].islower() and countA == 3:    #字符为小写,且countA为3时执行
  20.         countB = 1
  21.         countA = 0
  22.         target = i
  23.         continue   
  24.     countA = 0  #不符合上述条件时countA,B,C置0
  25.     countB = 0
  26.     countC = 0
  27.    
  28.    
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-11-12 22:51:40 | 显示全部楼层    本楼为最佳答案   
全部用平行if判定肯定不可能满足条件
因为循环到任意位置的时候,都不知道后面三个字符到底是什么
所以最后的if应该判定i大于等于3 且考察 str1[i-3]字符是否大小写,而且位置也应该放到第一个if后面
修改如下:

  1. str1 = '''拷贝AAAiBBkkAAAiBBB究竟是怎样的呢CCCuDDD
  2. 看一看'''
  3. countA = 0                 #统计前三个字母为大写时计数
  4. countB = 0                 #满足前三个为大写字母后跳转条件用
  5. countC = 0                #统计后三个字母为大写时计数
  6. length = len(str1)

  7. for i in range(length):
  8.     if str1[i] == '\n':         #换行则重新执行循环
  9.         continue
  10.     if str1[i].isupper():       #字符为大写时执行
  11.         if countB == 1:       #countB为1时统计countC的数量
  12.             countC += 1
  13.             countA = 0
  14.             if i > 2 and str1[i-3].islower() and countC == 3:   #字符为小写,且countC为3时执行
  15.                 print(str1[target],end='')
  16.         else:
  17.             countA += 1      #否则重新统计countA的数量
  18.         continue
  19.     if str1[i].islower() and countA == 3:    #字符为小写,且countA为3时执行
  20.         countB = 1
  21.         countA = 0
  22.         target = i
  23.         continue   
  24.     countA = 0  #不符合上述条件时countA,B,C置0
  25.     countB = 0
  26.     countC = 0
  27.    
  28.    
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-13 00:50:21 | 显示全部楼层
BngThea 发表于 2017-11-12 22:51
全部用平行if判定肯定不可能满足条件
因为循环到任意位置的时候,都不知道后面三个字符到底是什么
所以最 ...

谢谢回答,还有一个小问题:
第20行:
if i > 2 and str1[i-3].islower() and countC == 3:
如果缩减成if countC == 3:
运行结果无误,可否这样精简呢?

因为countC为3,并且在countB==1的前提下,必然满足i > 2 and str1[i-3].islower()的条件。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-13 07:03:42 From FishC Mobile | 显示全部楼层
payton24 发表于 2017-11-13 00:50
谢谢回答,还有一个小问题:
第20行:
if i > 2 and str1.islower() and countC == 3:

可以的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-13 08:28:31 | 显示全部楼层

谢谢,又建立了一点自信
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 06:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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