鱼C论坛

 找回密码
 立即注册
查看: 2386|回复: 14

Python20讲 动动手1

[复制链接]
发表于 2016-12-11 23:54:16 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 lixiaotutu 于 2016-12-30 17:52 编辑

下面是动动手1的答案,有个地方没看懂  #之前只是说countA,B,C等于0,并没有定义它们,为什么在这里就可以直接表示A等于统计前面的大写字母,B等于统计小写字母,C等于统计后面的大写字母 ,麻烦大神们解答一下,感激不尽


1.请用已学过的知识编写程序,找出小甲鱼藏在下边这个长字符串中的密码,密码的埋藏点符合以下规律:
    a) 每位密码为单个小写字母
    b) 每位密码的左右两边均有且只有三个大写字母


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
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-12-12 17:51:55 | 显示全部楼层
这个是写程序的人本身的思路,是基于这个思路写的程序,#后面只是解释
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-12 20:13:46 | 显示全部楼层
666666
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-12 23:50:07 | 显示全部楼层
这段代码至今没看懂!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-13 04:30:47 | 显示全部楼层
小茗同学 发表于 2016-12-12 17:51
这个是写程序的人本身的思路,是基于这个思路写的程序,#后面只是解释

对,这个我知道。我是想问,这段代码里面最开始并没有定义count A, B,C,但在后面的if语句里面却可以直接使用,而且结果等于他#号后面解释的含义。。。。。我不知道我说的你懂了没,我有点不知道怎么表达。就是我没懂这里怎么使用countA,B,C的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-13 04:32:43 | 显示全部楼层
jina110 发表于 2016-12-12 23:50
这段代码至今没看懂!

我没看懂,然后发现也没人问,然后对自己产生了深深的怀疑,希望不是只有我们两个没看懂
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-13 09:21:18 | 显示全部楼层
没看懂的路过。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-13 10:12:25 | 显示全部楼层
lixiaotutu 发表于 2016-12-13 04:30
对,这个我知道。我是想问,这段代码里面最开始并没有定义count A, B,C,但在后面的if语句里面却可以直 ...

这段代码在给countABC赋值为0的时候就已经是定义了,也就是说已经确定了他们在程序中的位置,LZ 后面的if语句的str应改成str[i]才对
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-14 03:15:00 | 显示全部楼层
小茗同学 发表于 2016-12-13 10:12
这段代码在给countABC赋值为0的时候就已经是定义了,也就是说已经确定了他们在程序中的位置,LZ 后面的if ...

countABC等于零的时候已经定义了,就是说定义的过程没有写出来是吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-14 09:56:19 | 显示全部楼层
lixiaotutu 发表于 2016-12-14 03:15
countABC等于零的时候已经定义了,就是说定义的过程没有写出来是吗?

不需要定义过程,本身count A = 0这个语句就是定义
请问你是从Java转过来的吗,Java定义就需要int a = 0的方式定义,但是Python可以直接定义
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-14 23:48:47 | 显示全部楼层
小茗同学 发表于 2016-12-14 09:56
不需要定义过程,本身count A = 0这个语句就是定义
请问你是从Java转过来的吗,Java定义就需要int a = 0 ...

我不是,我就是零基础学python的,所以不每一步的都详细说一下我就看不懂了。。。。那就是说"count A=0" 这句话就表示 "统计前面的大写字母" 这个意思吗? 那我要是把countA=0 放在别的代码里也是这个意思吗?

谢谢你的耐心回答, 这个问题没弄明白心里别得慌
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-15 08:58:56 | 显示全部楼层
看了两天,弄明白后自己写的注释  希望对你们有帮助

  1. #寻找藏在长字符串中的密码
  2. #每位密码为单个小写字母
  3. #每位密码的左右两边都有且只有三个大写字母
  4. str='''
  5.     这里是长字符串
  6. '''
  7. length = len(str) #要借助索引进行循环,并通过索引确定位置字母是大写,还是小写

  8. countA = 0  #记录左边大写字母
  9. countB = 0 #记录小写字母
  10. countC = 0 #记录右边大写字母

  11. for i in range(length):
  12.     if str[i] == '\n':    #如果是换行,则继续执行
  13.         continue

  14.   # 如果字母是大写的,则需要判断该大写应该计入左边,还是应该计入右边
  15.     if str[i].isupper():
  16.         if countB:  #如果已经找到了一个小写字母,大写字母应该计入右边
  17.             countC += 1
  18.         else:     #如果还没有找到小写字母 ,则大写字母应该计入左边
  19.             countA += 1
  20.             countC = 0

  21.     if str[i].islower():#如果当前字母是小写,则需要判断左边是否是三个大写字母,不是,则全都归零,从新找
  22.         if countA != 3:
  23.             countA = 0
  24.             countB = 0
  25.             countC = 0
  26.         else:
  27.             if countB: #如果已经存在一个小写字母了  初始化,重新找
  28.                 countA = 0
  29.                 countB = 0
  30.                 countC = 0
  31.             else:    #如果还没有出现,则统计
  32.                 countB = 1 #如果左边是三个大写字母,则countB目前有效,计算右边的大写字母数,使用上面的if语句
  33.                 countC = 0 #目前还不不知道右边的字母  需要使用上面的if语句进行获取,这里初始countC的值
  34.                 target = i #给i做个记录 ,如果符合需求  会拿来取索引对应的小写字母

  35.     if countA ==3 and countC == 3: #如果countA 和countC 都等于3了 ,需要判断右边有没有第四个大写

  36.         #i不能是最后一个字母的时候,右边第四个字母是大写,不符合条件
  37.         if i+1 != length and str[i + 1].isupper():
  38.         #这里为什么不初始countA呢,上一个if语句如果countA不等于3 会自动重置
  39.             countB = 0 #第四个是大写,不符合条件 从新循环
  40.             countC = 0
  41.         else:
  42.             print(str[target],end= '  ')#如果右边第四个不是大写,打印标记的索引对应的小写字母
  43.             countA = 3 #将countC的值继续使用
  44.             countB = 0  #初始化  开始寻找下一个字母
  45.             countC = 0
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-15 11:34:13 | 显示全部楼层
lixiaotutu 发表于 2016-12-14 23:48
我不是,我就是零基础学python的,所以不每一步的都详细说一下我就看不懂了。。。。那就是说"c ...

是的,countA代表的就是前面大写字母的个数,后面的0只是给了个初始值而已
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-16 04:35:32 | 显示全部楼层
jiangzhenghai 发表于 2016-12-15 08:58
看了两天,弄明白后自己写的注释  希望对你们有帮助

看懂了,你好厉害,真是太谢谢了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-16 04:37:30 | 显示全部楼层
小茗同学 发表于 2016-12-15 11:34
是的,countA代表的就是前面大写字母的个数,后面的0只是给了个初始值而已

我现在懂了,countABC是通过if和else的条件语句定义了他们的本身的意思。。。。谢谢你一直耐心的解答
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-24 11:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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