第20讲的一个课后习题的程序看不懂,求大神指点
[课后作业] 第020讲:函数:内嵌函数和闭包 | 课后测试题及答案
动动手:
1. 请用已学过的知识编写程序,找出小甲鱼藏在下边这个长字符串中的密码,密码的埋藏点符合以下规律:
a) 每位密码为单个小写字母
b) 每位密码的左右两边均有且只有三个大写字母
(由于我们还没有学习到文件读取方法,大家下载后拷贝过去即可)
请下载字符串文件: http://bbs.fishc.com/static/image/filetype/text.gif string2.txt (8.21 KB, 下载次数: 252)
谁可以给我讲一下这个程序的实现过程呢,实在看不懂,各位对我这种以前没怎么学习编程语言的学生有什么好的学习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, end='')
[*] countA = 0
[*] countB = 0
[*] countC = 0
[*]
也是初学,给几个建议,不一定对:
建议一:发帖,复制粘贴可以,但也请稍微编辑下,一堆的、等等html标签看着太乱,也显得没诚意。
建议二:帖子中的代码最好用代码格式,就是发帖框中的<>标志,这样看的清楚。
建议三:代码应该是自己照答案敲的吧,有关键性的错误,不看@小甲鱼 的答案,谁都看不明白。
建议四:问题最好能具体些,哪句代码没明白,哪个变量不知道意义。
具体这个题目的实现:代码的思路就是题目中的问题,先找大写字母,找到三个,如果后面一个是小写,就置一个标志countB = 1,之后如果又是三个大写字母,就说明是密码中的一个字母。
str1 = '''拷贝过来的字符串'''
countA = 0 #前面三个大写的计数
countB = 0 #前面有三个大写,后面一个是小写,就置countB = 1,实际上应该用一个布尔量更清楚
countC = 0 #前面两个条件都满足,又找到大写的计数,如果 countC == 3 说明找到一个密码字母
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, end='')
countA = 0
countB = 0
countC = 0
微逻辑 发表于 2015-3-10 15:40
也是初学,给几个建议,不一定对:
建议一:发帖,复制粘贴可以,但也请稍微编辑下,一堆的、等等html标签 ...
谢谢您的建议,我会认真听取的,初进论坛有些东西不是很懂,还望以后多多指教,谢谢啦 微逻辑 发表于 2015-3-10 15:40
也是初学,给几个建议,不一定对:
建议一:发帖,复制粘贴可以,但也请稍微编辑下,一堆的、等等html标签 ...
再请教个问题:
下面这个第一个if语句满足条件执行后,遇到continue不就结束了这个for循环么,然后i+1再次进入循环,我是想说:下面两个if条件中的i一定不是相等的,您明白我意思么
if str1.islower() and countA == 3: #找到小写且第一个条件满足,即满足前两个条件
countB = 1
countA = 0
target = i #可能是密码字母,暂存下
continue
if str1.islower() and countC == 3: #如果找到小写,并且前面三个条件都满足,说明暂存的就是密码字母
print(str1, end='') 厉害 学习了 不懂,学习了 还是看不懂啊:titter: wxy245791 发表于 2015-3-12 15:52
还是看不懂啊
:sweat: str1.replace(' ','')
str1.replace('\n','')
count=0
key=''
for each in str1:
if each.islower():
count=str1.index(each)
if str1.isupper() and str1.isupper():
key+=each
print(key) 这样写可以不?
答案是不是lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll 你运行一下试试呀 学习了 wanderkaka 发表于 2015-3-16 17:03
这样写可以不?
答案是不是llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll ...
我一开始跟你一样,140个l,但是不对,应该是lovefishc 同求大神解答 微逻辑 发表于 2015-3-10 15:40
也是初学,给几个建议,不一定对:
建议一:发帖,复制粘贴可以,但也请稍微编辑下,一堆的、等等html标签 ...
这个算法是不是有个漏洞就是 当MMMaMMMMaaaMMMaMMM 时 countA = 0 countB = 1 countC > 3
就永远不会有结果啊 收藏 前来学习! 学习学习 {:10_266:}{:10_266:}{:10_266:}还是没怎么看懂,卡在第20讲这里了。。。 我现在也是卡在这。。。不懂 其实可以罩着程序划下流程图,会有个大概理解。就是要自己写有点晕。
页:
[1]
2