鱼C论坛

 找回密码
 立即注册
查看: 8455|回复: 32

第20讲的一个课后习题的程序看不懂,求大神指点

[复制链接]
发表于 2015-3-10 15:40:02 | 显示全部楼层 |阅读模式
20鱼币


[课后作业] 第020讲:函数:内嵌函数和闭包 | 课后测试题及答案 [color=rgb(153, 153, 153) !important]
[color=rgb(153, 153, 153) !important]

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

(由于我们还没有学习到文件读取方法,大家下载后拷贝过去即可)
请下载字符串文件:

                               
登录/注册后可看大图
string2.txt (8.21 KB, 下载次数: 252)
[color=rgb(153, 153, 153) !important]

谁可以给我讲一下这个程序的实现过程呢,实在看不懂,各位对我这种以前没怎么学习编程语言的学生有什么好的学习python的建议么,求大神指点!


答案代码如下:
  • str1 = '''拷贝过来的字符串'''
  • countA = 0
  • countB = 0
  • countC = 0
  • length = len(str1)
  • for i in range(length):
  •     if str1 == '\n':
  •         continue
  •     if str1.isupper():
  •         if countB == 1:
  •             countC += 1
  •             countA = 0
  •         else:
  •             countA += 1
  •         continue
  •     if str1.islower() and countA == 3:
  •         countB = 1
  •         countA = 0
  •         target = i
  •         continue
  •     if str1.islower() and countC == 3:
  •         print(str1[target], end='')
  •     countA = 0
  •     countB = 0
  •     countC = 0


最佳答案

查看完整内容

也是初学,给几个建议,不一定对: 建议一:发帖,复制粘贴可以,但也请稍微编辑下,一堆的、等等html标签看着太乱,也显得没诚意。 建议二:帖子中的代码最好用代码格式,就是发帖框中的标志,这样看的清楚。 建议三:代码应该是自己照答案敲的吧,有关键性的错误,不看@小甲鱼 的答案,谁都看不明白。 建议四:问题最好能具体些,哪句代码没明白,哪个变量不知道意义。 具体这个题目的实现:代码的思路就是题目中的问题,先 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-3-10 15:40:03 | 显示全部楼层
也是初学,给几个建议,不一定对:
建议一:发帖,复制粘贴可以,但也请稍微编辑下,一堆的[color]、[size]等等html标签看着太乱,也显得没诚意。
建议二:帖子中的代码最好用代码格式,就是发帖框中的<>标志,这样看的清楚。
建议三:代码应该是自己照答案敲的吧,有关键性的错误,不看@小甲鱼 的答案,谁都看不明白。
建议四:问题最好能具体些,哪句代码没明白,哪个变量不知道意义。
具体这个题目的实现:代码的思路就是题目中的问题,先找大写字母,找到三个,如果后面一个是小写,就置一个标志countB = 1,之后如果又是三个大写字母,就说明是密码中的一个字母。
  1. str1 = '''拷贝过来的字符串'''
  2. countA = 0 #前面三个大写的计数
  3. countB = 0 #前面有三个大写,后面一个是小写,就置countB = 1,实际上应该用一个布尔量更清楚
  4. countC = 0 #前面两个条件都满足,又找到大写的计数,如果 countC == 3 说明找到一个密码字母
  5. length = len(str1)
  6. for i in range(length):
  7.     if str1[i] == '\n': #防止换行对判断的干扰
  8.         continue
  9.     if str1[i].isupper(): #如果找到的是大写
  10.         if countB == 1: #并且前面两个条件已经满足
  11.             countC += 1 #计数第三个条件
  12.             countA = 0
  13.         else:
  14.             countA += 1 #前面两个条件不满足后又找到大写,计数第一个条件
  15.         continue
  16.     if str1[i].islower() and countA == 3: #找到小写且第一个条件满足,即满足前两个条件
  17.         countB = 1
  18.         countA = 0
  19.         target = i #可能是密码字母,暂存下
  20.         continue
  21.     if str1[i].islower() and countC == 3: #如果找到小写,并且前面三个条件都满足,说明暂存的就是密码字母
  22.         print(str1[target], end='')
  23.     countA = 0
  24.     countB = 0
  25.     countC = 0
复制代码

评分

参与人数 3荣誉 +11 鱼币 +11 贡献 +9 收起 理由
tawuming + 1 + 1 + 1
lianyingteng + 5 + 5 + 3 支持楼主!
~风介~ + 5 + 5 + 5 支持楼主!

查看全部评分

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

使用道具 举报

 楼主| 发表于 2015-3-11 09:38:24 | 显示全部楼层
微逻辑 发表于 2015-3-10 15:40
也是初学,给几个建议,不一定对:
建议一:发帖,复制粘贴可以,但也请稍微编辑下,一堆的、等等html标签 ...

谢谢您的建议,我会认真听取的,初进论坛有些东西不是很懂,还望以后多多指教,谢谢啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-3-11 10:00:17 | 显示全部楼层
微逻辑 发表于 2015-3-10 15:40
也是初学,给几个建议,不一定对:
建议一:发帖,复制粘贴可以,但也请稍微编辑下,一堆的、等等html标签 ...

再请教个问题:
下面这个第一个if语句满足条件执行后,遇到continue不就结束了这个for循环么,然后i+1再次进入循环,我是想说:下面两个if条件中的i一定不是相等的,您明白我意思么
  1.   if str1[i].islower() and countA == 3: #找到小写且第一个条件满足,即满足前两个条件
  2.         countB = 1
  3.         countA = 0
  4.         target = i #可能是密码字母,暂存下
  5.         continue
  6.     if str1[i].islower() and countC == 3: #如果找到小写,并且前面三个条件都满足,说明暂存的就是密码字母
  7.         print(str1[target], end='')
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-3-11 10:29:13 | 显示全部楼层
厉害 学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-3-12 15:50:03 | 显示全部楼层
不懂,学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-3-12 15:52:10 | 显示全部楼层
还是看不懂啊:titter:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-3-12 18:22:42 | 显示全部楼层

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

使用道具 举报

发表于 2015-3-16 17:02:50 | 显示全部楼层
str1.replace(' ','')
str1.replace('\n','')
count=0
key=''
for each in str1:
    if each.islower():
        count=str1.index(each)
        if str1[count-3:count].isupper() and str1[count+1:count+4].isupper():
            key+=each
print(key)      
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-3-16 17:03:35 | 显示全部楼层
这样写可以不?
答案是不是lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-3-16 21:43:38 | 显示全部楼层
你运行一下试试呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-7-13 14:59:32 | 显示全部楼层
学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-7-24 18:52:27 | 显示全部楼层
wanderkaka 发表于 2015-3-16 17:03
这样写可以不?
答案是不是llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll ...

我一开始跟你一样,140个l,但是不对,应该是lovefishc
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-7-25 23:13:09 | 显示全部楼层
同求大神解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-12-8 22:46:52 | 显示全部楼层
微逻辑 发表于 2015-3-10 15:40
也是初学,给几个建议,不一定对:
建议一:发帖,复制粘贴可以,但也请稍微编辑下,一堆的、等等html标签 ...

这个算法是不是有个漏洞就是 当MMMaMMMMaaaMMMaMMM 时 countA = 0 countB = 1 countC > 3
就永远不会有结果啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-10-27 17:01:22 | 显示全部楼层
收藏 前来学习!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-10-28 08:41:34 | 显示全部楼层
学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-2-10 22:42:32 | 显示全部楼层
还是没怎么看懂,卡在第20讲这里了。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-9-28 23:05:34 | 显示全部楼层
我现在也是卡在这。。。不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-11-8 10:09:57 | 显示全部楼层
其实可以罩着程序划下流程图,会有个大概理解。  就是要自己写有点晕。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 13:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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