第35讲课后题的第4题答案是不是有问题orz
如题,我照抄答案的第4题,在text+='【%s】源文件%d个,源代码%d行\n' % (i,file_list,lines)
出现问题 invalid character in identifier 无效参数
是我哪里打错了吗还是什么orz
下面是我照抄的代码
=============================================================
import easygui as g
import os
def show_result(start_dir):
lines=0
total=0
text=''
for i in source_list:
lines=source_list
total+=lines
text+='【%s】源文件%d个,源代码%d行\n' % (i,file_list,lines)
title='统计结果'
msg='您目前共累积编写了%d行代码,完成进度:%.2f %%\n离10万行代码还差%d行,请继续努力!' % (total,total/1000,100000-total)
g.textbox(msg,title,text)
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
def search_file(start_dir):
os.chdir(start_dir)
for each_file in os.listdir(os.curdir):
ext=os.path.splitext(each_file)
if ext in target:
lines=calc_code(each_file) #统计行数
try:
fiel_list+=1
except KeyError:
file_list=1
try:
source_list+=lines
except KeyError:
source_list=lines
if os.path.isdir(each_file):
search_file(each_file)
os.chdir(os.pardir)
target=['.c','.cpp','.py','.cc','.java','.pas','.asm']
file_list={}
source_list={}
g.msgbox=('请打开您存放所有代码的文件夹'.'统计代码量')
path=g.diropenbox('请选择您的代码库:')
search_file(path)
show_result(path)
看上去是小括号是中文的 hi 原因如下,源代码中共3处手误
1. 第12行代码,小括号用的是中文字符。应该为 :text+='【%s】源文件%d个,源代码%d行\n' % (i,file_list,lines)
2. 第14行代码,同 1
3. 第55行代码,应该使用英文逗号。应该为:g.msgbox=('请打开您存放所有代码的文件夹' , '统计代码量')
thexiosi 发表于 2018-5-10 08:26
hi 原因如下,源代码中共3处手误
1. 第12行代码,小括号用的是中文字符。应该为 :text+='【%s】源文件% ...
orz是的,打代码打傻了,感谢纠错
但还有个问题,就是我运行的时候,有些源文件(.py) 显示是代码0行,这是为什么,
就像我上面那个代码,显示的是0行,大佬求教 BngThea 发表于 2018-5-9 22:08
看上去是小括号是中文的
是的谢了,感谢纠错 thexiosi 发表于 2018-5-10 08:26
hi 原因如下,源代码中共3处手误
1. 第12行代码,小括号用的是中文字符。应该为 :text+='【%s】源文件% ...
还有为什么
total+=lines
text+='【%s】源文件%d个,源代码%d行\n' % (i,file_list,lines)
这里的源代码总行数是指lines,而不是上边的total 本帖最后由 thexiosi 于 2018-5-10 16:42 编辑
咕咕鸡鸽鸽 发表于 2018-5-10 15:56
orz是的,打代码打傻了,感谢纠错
但还有个问题,就是我运行的时候,有些源文件(.py) 显示是代码0行,这 ...
哦,明白楼主意思了,我再看一下哈 咕咕鸡鸽鸽 发表于 2018-5-10 15:56
orz是的,打代码打傻了,感谢纠错
但还有个问题,就是我运行的时候,有些源文件(.py) 显示是代码0行,这 ...
原因已查明,读.py文件时出现编码错误,因此代码走 except UnicodeDecodeError,导致统计出的行数为 0
我的修改建议如下(更新calc_code() ):
def calc_code(file_name):
lines = 0
with open(file_name, encoding = 'utf-8') as f: #打开文件时,指定编码类型为utf-8
print('正在分析文件:%s ...' % file_name)
try:
for each_line in f:
lines += 1
except UnicodeDecodeError:
pass
return lines thexiosi 发表于 2018-5-10 17:14
原因已查明,读.py文件时出现编码错误,因此代码走 except UnicodeDecodeError,导致统计出的行数为 0
...
感觉大佬,终于搞懂了 咕咕鸡鸽鸽 发表于 2018-5-10 19:06
感觉大佬,终于搞懂了
不客气 :)
页:
[1]