鱼C论坛

 找回密码
 立即注册
查看: 3842|回复: 22

第20课动动手第一题无法理解啊.....求助!!!

[复制链接]
发表于 2016-8-4 15:42:27 | 显示全部楼层 |阅读模式
30鱼币
小甲鱼写的那个答案虽然有中文注释 可我还是无法理解......
我自己写了一个

小甲鱼版本:

str1 = '''ABSaDKSbRIHcRHGcdDIF'''

countA = 0  # 统计前边的大写字母
countB = 0  # 统计小写字母
countC = 0  # 统计后边的大写字母
length = len(str1)

for i in range(length):
    if str1[i] == '\n':
        continue

    """
    |如果str1[i]是大写字母:
    |-- 如果已经出现小写字母:
    |-- -- 统计后边的大写字母
    |-- 如果未出现小写字母:
    |-- -- 清空后边大写字母的统计
    |-- -- 统计前边的大写字母
    """
    if str1[i].isupper():
        if countB:
            countC += 1
        else:
            countC = 0
            countA += 1

    """
    |如果str1[i]是小写字母:
    |-- 如果小写字母前边不是三个大写字母(不符合条件):
    |-- -- 清空所有记录,重新统计
    |-- 如果小写字母前边是三个大写字母(符合条件):
    |-- -- 如果已经存在小写字母:
    |-- -- -- 清空所有记录,重新统计(出现两个小写字母)
    |-- -- 如果该小写字母是唯一的:
    |-- -- -- countB记录出现小写字母,准备开始统计countC
    """
    if str1[i].islower():
        if countA != 3:
            countA = 0
            countB = 0
            countC = 0
        else:
            if countB:
                countA = 0
                countB = 0
                countC = 0
            else:
                countB = 1
                countC = 0
                target = i

    """
    |如果前边和后边都是三个大写字母:
    |-- 如果后边第四个字母也是大写字母(不符合条件):
    |-- -- 清空记录B和C,重新统计
    |-- 如果后边仅有三个大写字母(符合所有条件):
    |-- -- 打印结果,并清空所有记录,进入下一轮统计
    """
    if countA == 3 and countC == 3:
        if i+1 != length and str1[i+1].isupper():
            countB = 0
            countC = 0
        else:
            print(str1[target], end='')
            countA = 3
            countB = 0
            countC = 0

再次公布下这题的答案,小甲鱼莫怪啊。。。

这是我的版本:
a='''ACFlCTLIQlAIVMTqHFkswqbDDHtpgcWaXSSglUYKE'''  #里面还有很多, 我是直接复制的所有代码
length=len(a)
for i in range(4,(length-4)):
    d=str([a[i-3],a[i-2],a[i-1],a[i+1],a[i+2],a[i+3]])
    e=str([a[i-4],a[i+4]])
    if a[i].islower():
        if d.isupper()and e.islower():
            print(a[i],end='')

结果也正确, 是ilovefishc  我自己写的这个理解起来容易,就是有点傻的代码
谁能分析下小甲鱼的答案,讲清楚逻辑顺序   
再比较下我这个

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-8-4 15:53:35 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-8-4 20:20:59 | 显示全部楼层
啦啦啦
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-8-5 21:13:37 | 显示全部楼层
没懂+1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-8-6 15:17:38 | 显示全部楼层
这是我理解后列的一个过程: 数为ABcdEFHgMNQrSTVGmOPQzJACd    可以看简单看出 只有g,z 满足条件
下面是每个字母的过程, 用的是小甲鱼的方法。 count A B C 我就用 前 中 后 代替 方便理解!!!!
->的 意思是变为 前->0  就是 前变为1   len 就是整个字符的长度!
                                                  首先            前=0     中=0     后=0
A:  (大写,此时的中为0)                               前->1     中=0     后=0
B:  (大写,此时的中为0)                               前->2     中=0     后=0
c:  (是小写但此时前!=3,所以清空)            前->0     中->0    后->0
d:  (是小写但此时前!=3,所以清空)           前->0     中->0    后->0
E:  (大写,此时的中为0)                                 前->1     中=0      后=0
F:  (大写,此时的中为0)                                 前->2     中=0     后=0
H:  (大写,此时的中为0)                                前->3     中=0     后=0
g:  (是小写 此时 前=3)                                    前=3      中->1    后->0   traget=g
M:  (大写,此时的中为1)                                前=3     中=1     后->1
N:  (大写,此时的中为1)                                前=3      中=1      后->2
Q:  (大写,此时的中为1)                                前=3       中=1     后->3  此时 前 后 都为3了 执行最后一个IF 第四个(也就是Q后面的那个) r的索引+1!=len (r不是最后一个)且  r  不是大写,所以打印出g    然后重新定义前中后!! 前->3     中->0    后->0

r:  (是小写 此时 前=3)                                    前=3      中->1    后->0    traget=r
S:  (大写,此时的中为1)                                前=3     中=1      后->1
T:  (大写,此时的中为1)                                前=3     中=1      后->2
V:  (大写,此时的中为1)                                前=3     中=1     后->3   此时 前 后 都为3了 执行最后一个IF 第四个(也就是V后面的那个) G的 索引+1=len (G是最后一个)且  G 是大写,所以舍弃r      并清空  中  和 后              前=3     中->0    后->0

G:  (大写,此时的中为0)                                 前=4     中=0      后=0
m:(是小写但此时前!=3,所以清空)             前->0     中->0    后->0
O:(大写,此时的中为0)                                 前->1     中=0      后=0
P:(大写,此时的中为0)                                 前->2     中=0      后=0
Q:(大写,此时的中为0)                                 前->3     中=0      后=0
z: (是小写 此时 前=3)                                   前=3      中->1    后->0   traget=z
J:(大写,此时的中为1)                                前=3     中=1       后->1
A:(大写,此时的中为1)                                前=3     中=1      后->2
C:(大写,此时的中为1)                                前=3     中=1      后->3  此时 前 后 都为3了 执行最后一个IF 第四个(也就是C后面的那个)d的索引+1!=len (r不是最后一个)且  d  不是大写,所以打印出z    前->3     中->0    后->0

d:(是小写 此时 前=3)                                   前=3      中->1    后->0   traget=d

第一次写这么多,这是我理解的过程, 应该说的通, 逐个去看的话 应该能理解吧..
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-8-6 15:18:46 | 显示全部楼层

这是我理解后列的一个过程: 数为ABcdEFHgMNQrSTVGmOPQzJACd    可以看简单看出 只有g,z 满足条件
下面是每个字母的过程, 用的是小甲鱼的方法。 count A B C 我就用 前 中 后 代替 方便理解!!!!
->的 意思是变为 前->0  就是 前变为1   len 就是整个字符的长度!
                                                  首先            前=0     中=0     后=0
A:  (大写,此时的中为0)                               前->1     中=0     后=0
B:  (大写,此时的中为0)                               前->2     中=0     后=0
c:  (是小写但此时前!=3,所以清空)            前->0     中->0    后->0
d:  (是小写但此时前!=3,所以清空)           前->0     中->0    后->0
E:  (大写,此时的中为0)                                 前->1     中=0      后=0
F:  (大写,此时的中为0)                                 前->2     中=0     后=0
H:  (大写,此时的中为0)                                前->3     中=0     后=0
g:  (是小写 此时 前=3)                                    前=3      中->1    后->0   traget=g
M:  (大写,此时的中为1)                                前=3     中=1     后->1
N:  (大写,此时的中为1)                                前=3      中=1      后->2
Q:  (大写,此时的中为1)                                前=3       中=1     后->3  此时 前 后 都为3了 执行最后一个IF 第四个(也就是Q后面的那个) r的索引+1!=len (r不是最后一个)且  r  不是大写,所以打印出g    然后重新定义前中后!! 前->3     中->0    后->0

r:  (是小写 此时 前=3)                                    前=3      中->1    后->0    traget=r
S:  (大写,此时的中为1)                                前=3     中=1      后->1
T:  (大写,此时的中为1)                                前=3     中=1      后->2
V:  (大写,此时的中为1)                                前=3     中=1     后->3   此时 前 后 都为3了 执行最后一个IF 第四个(也就是V后面的那个) G的 索引+1=len (G是最后一个)且  G 是大写,所以舍弃r      并清空  中  和 后              前=3     中->0    后->0

G:  (大写,此时的中为0)                                 前=4     中=0      后=0
m:(是小写但此时前!=3,所以清空)             前->0     中->0    后->0
O:(大写,此时的中为0)                                 前->1     中=0      后=0
P:(大写,此时的中为0)                                 前->2     中=0      后=0
Q:(大写,此时的中为0)                                 前->3     中=0      后=0
z: (是小写 此时 前=3)                                   前=3      中->1    后->0   traget=z
J:(大写,此时的中为1)                                前=3     中=1       后->1
A:(大写,此时的中为1)                                前=3     中=1      后->2
C:(大写,此时的中为1)                                前=3     中=1      后->3  此时 前 后 都为3了 执行最后一个IF 第四个(也就是C后面的那个)d的索引+1!=len (r不是最后一个)且  d  不是大写,所以打印出z    前->3     中->0    后->0

d:(是小写 此时 前=3)                                   前=3      中->1    后->0   traget=d

第一次写这么多,这是我理解的过程, 应该说的通, 逐个去看的话 应该能理解吧..
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-8-6 15:20:35 | 显示全部楼层

可以看下我列的过程
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-8-6 15:21:41 | 显示全部楼层

可以看下我写的过程
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-8-6 15:23:05 | 显示全部楼层

可以看下我写的过程
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-8-6 15:24:02 | 显示全部楼层

可以看下我写的过程
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-8-8 11:53:07 | 显示全部楼层
你的代码是从第五个字符开始判断的,如果字符串是这样ABCdEFGhIGSD,开头的这个会漏掉
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-8-8 13:11:30 | 显示全部楼层
小由的爸 发表于 2016-8-8 11:53
你的代码是从第五个字符开始判断的,如果字符串是这样ABCdEFGhIGSD,开头的这个会漏掉

哦  谢谢 ! 我理解了小甲鱼的那个以后
自己的这个问题 我也清楚了~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-8-14 11:55:08 | 显示全部楼层
没懂。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-8-16 14:52:22 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-8-27 17:01:50 | 显示全部楼层
看蒙圈了,不看了,自己写一个试试去
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-9-4 17:59:12 | 显示全部楼层
没懂……
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-9-6 20:50:15 | 显示全部楼层
学到python我有点晕了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-11-16 18:28:36 | 显示全部楼层
正在理解
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-11-16 18:37:37 | 显示全部楼层
再来一下
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-11-17 10:47:04 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-30 03:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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