鱼C论坛

 找回密码
 立即注册
查看: 1963|回复: 9

[已解决]《第020讲:函数和闭包》——第0道动手题

[复制链接]
发表于 2018-8-31 11:45:25 | 显示全部楼层 |阅读模式

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

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

x
关于小甲鱼第20讲论坛课后练习动手题第0题,发帖求助

第10行代码不理解,但是实际测试的时候把这行代码给注释掉,会发现运行结果无线循环下去

但想了半天没想通这行代码,发帖上来求助高手

新手上来还请多多包涵


020讲函数和闭包.JPG
最佳答案
2018-9-1 00:59:00
你大概是被for ,if ,缩进,给搞懵逼了。 这段代码,可以精简为以下结构(暂时把中间的 if  .... else ...结构去掉):

for ......:
        if ......:
                 list1.append(x)

这是一个以 判断结构 为循环体的for 语句。
for.... 的作用是把 str1的每个字符都 循环一遍,每个不同的值用 each 表示;循环一个值,就执行循环体(判断结构),如果这个值不在list1里,就把它添加进 list1,就是这么简单呀。
顺便再摊开

if each == '\n':
            print('\\n', str1.count(each))
else:
            print(each, str1.count(each))

这段代码来讲,你可以把它看做一句代码: print(each,str1.count(each))
意思是:如果这个值不再list1里,即是没统计过的,那我就需要 打印这个字符,并且计算它的次数呀。

把第10行注释掉,list1一直是空列表,str1的每一个字符都需要执行一次 print(each, str1.count(each)),所以就满屏幕都是了,哪怕是重复的字符也要继续执行这一句。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-31 11:48:48 | 显示全部楼层
防止你重复统计,没统计的放list1里,然后再碰到相同的if不会进,也不会在打印和添加进list1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-8-31 12:59:34 | 显示全部楼层
楼上说反了把,应该是统计过的放在list1里,循环里判断字符不在list1里才进行统计
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-31 15:27:52 | 显示全部楼层
pxxs 发表于 2018-8-31 12:59
楼上说反了把,应该是统计过的放在list1里,循环里判断字符不在list1里才进行统计

呵呵呵,,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-31 15:37:29 | 显示全部楼层
对当前each代表字符串进行判断,如果不在list1中,说明之前没有出现过,并将其加入list1,防止重复统计.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-31 16:06:34 | 显示全部楼层
嘿嘿,我刚刚做的
def counts(strn):
    c_dict = {}
    keylist = []
    for each in strn:
        for key in c_dict:
            keylist.append(key)
        if each not in keylist:
            c_dict[each] = strn.count(each)
        else:
            continue
    print(c_dict)
counts(str1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-1 00:59:00 | 显示全部楼层    本楼为最佳答案   
你大概是被for ,if ,缩进,给搞懵逼了。 这段代码,可以精简为以下结构(暂时把中间的 if  .... else ...结构去掉):

for ......:
        if ......:
                 list1.append(x)

这是一个以 判断结构 为循环体的for 语句。
for.... 的作用是把 str1的每个字符都 循环一遍,每个不同的值用 each 表示;循环一个值,就执行循环体(判断结构),如果这个值不在list1里,就把它添加进 list1,就是这么简单呀。
顺便再摊开

if each == '\n':
            print('\\n', str1.count(each))
else:
            print(each, str1.count(each))

这段代码来讲,你可以把它看做一句代码: print(each,str1.count(each))
意思是:如果这个值不再list1里,即是没统计过的,那我就需要 打印这个字符,并且计算它的次数呀。

把第10行注释掉,list1一直是空列表,str1的每一个字符都需要执行一次 print(each, str1.count(each)),所以就满屏幕都是了,哪怕是重复的字符也要继续执行这一句。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-3 16:32:39 | 显示全部楼层
geen 发表于 2018-9-1 00:59
你大概是被for ,if ,缩进,给搞懵逼了。 这段代码,可以精简为以下结构(暂时把中间的 if  .... else ...结 ...

感谢你回复,我再琢磨琢磨这段代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-30 17:58:58 | 显示全部楼层
你好,没出现过的字符字数统计的话,不应该都是1嘛?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-4 12:04:08 | 显示全部楼层
为什么\n就可以检索出特殊字符啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 21:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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