lianyingteng 发表于 2015-3-10 15:40:02

第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
[*]


微逻辑 发表于 2015-3-10 15:40:03

也是初学,给几个建议,不一定对:
建议一:发帖,复制粘贴可以,但也请稍微编辑下,一堆的、等等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

lianyingteng 发表于 2015-3-11 09:38:24

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

谢谢您的建议,我会认真听取的,初进论坛有些东西不是很懂,还望以后多多指教,谢谢啦

lianyingteng 发表于 2015-3-11 10:00:17

微逻辑 发表于 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='')

gelebo 发表于 2015-3-11 10:29:13

厉害 学习了

wxy245791 发表于 2015-3-12 15:50:03

不懂,学习了

wxy245791 发表于 2015-3-12 15:52:10

还是看不懂啊:titter:

lianyingteng 发表于 2015-3-12 18:22:42

wxy245791 发表于 2015-3-12 15:52
还是看不懂啊

:sweat:

wanderkaka 发表于 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.isupper() and str1.isupper():
            key+=each
print(key)      

wanderkaka 发表于 2015-3-16 17:03:35

这样写可以不?
答案是不是lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll

lianyingteng 发表于 2015-3-16 21:43:38

你运行一下试试呀

奇犽 发表于 2015-7-13 14:59:32

学习了

戴宇轩 发表于 2015-7-24 18:52:27

wanderkaka 发表于 2015-3-16 17:03
这样写可以不?
答案是不是llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll ...

我一开始跟你一样,140个l,但是不对,应该是lovefishc

玩毛球的猫 发表于 2015-7-25 23:13:09

同求大神解答

zys54919 发表于 2015-12-8 22:46:52

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

这个算法是不是有个漏洞就是 当MMMaMMMMaaaMMMaMMM 时 countA = 0 countB = 1 countC > 3
就永远不会有结果啊

tawuming 发表于 2016-10-27 17:01:22

收藏 前来学习!

dh89 发表于 2016-10-28 08:41:34

学习学习

浅笑无痕111 发表于 2017-2-10 22:42:32

{:10_266:}{:10_266:}{:10_266:}还是没怎么看懂,卡在第20讲这里了。。。

Jailz 发表于 2017-9-28 23:05:34

我现在也是卡在这。。。不懂

wiwi8742 发表于 2017-11-8 10:09:57

其实可以罩着程序划下流程图,会有个大概理解。就是要自己写有点晕。
页: [1] 2
查看完整版本: 第20讲的一个课后习题的程序看不懂,求大神指点