鱼C论坛

 找回密码
 立即注册
查看: 2215|回复: 1

[已解决]第三十五讲的课后作业的代码有一小段没看懂,有一些疑问

[复制链接]
发表于 2017-6-19 00:52:39 | 显示全部楼层 |阅读模式

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

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

x
第三十五讲里面的最后一题,计算代码量的那道题的答案里面小甲鱼的一段代码是

def calc_code(file_name):
    lines = 0
    with open(file_name) as f:
        print('正在分析文件:%s ...' % file_name)
        try:
            for each_line in f:
                lines += 1
        except UnicodeDecodeError:
            pass # 不可避免会遇到格式不兼容的文件,这里忽略掉......
    return lines

有一点疑问,

第一:
就是 for each_line in f:
这个函数的任务好像是计算文件的行数,然后for each_line in f: 是不是把 f 里面的内容一个单位一个单位地读出来了而不是一行一行的读
因为我觉得是不是需要用一个类似于.readline()的方法???

第二:
还想到一个问题就是,学习文件打开模式的时候,用的都是.txt文件,像这种后缀是.py, .java的文件,可以像.txt 文件一样使用.read(), .write()这些方法吗?

最后:
还有一个小疑问。我跑了一下答案的代码,统计了我的代码量竟然只有33行(到现在我编了真的不止33行)。。。 ,不知道是不是遇到UnicodeDecodeError这个东西给pass掉了... 只知道这是Unicode解码时的错误... 但是具体是什么东西不是很清楚,大神们能简单形象的稍微解释一下这个UnicodeDecodeError吗

刚刚开始学,好多方法用的都不熟练,请大家指教谢谢


最佳答案
2017-6-19 08:19:43
1.for each_line in f: 是将f作为迭代器,以行为单位,所以是可以统计出行数的。
2.无论的.py, .java,还是其他语言的源文件,其内容都是纯文本的,当然可以按txt文件的方式操作。
3.你说只统计出33行,我没有看到你的完整程序,这个函数只统计一个文件,是否把所有的文件的行数加到一起了?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-6-19 08:19:43 | 显示全部楼层    本楼为最佳答案   
1.for each_line in f: 是将f作为迭代器,以行为单位,所以是可以统计出行数的。
2.无论的.py, .java,还是其他语言的源文件,其内容都是纯文本的,当然可以按txt文件的方式操作。
3.你说只统计出33行,我没有看到你的完整程序,这个函数只统计一个文件,是否把所有的文件的行数加到一起了?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-28 03:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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