|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目4. 写一个程序统计你当前代码量的总和,并显示离十万行代码量还有多远?
要求一:递归搜索各个文件夹
要求二:显示各个类型的源文件和源代码数量
要求三:显示总行数与百分比
我的代码
import easygui as g
import os
def code_line(file):
lines = 0
tal_line = 0
with open(file,'rb') as code_file:
for i in code_file:
lines += 1
tal_line += 1
return lines,tal_line
def Search_file(path = ''):
for each in os.listdir(os.curdir):
file_type = os.path.splitext(each)[1]
if file_type in ['.py','.c','.pas']:
lines,tal_line = code_line(each)
try:
file_dict[file_type] += 1
except KeyError:
file_dict[file_type] = 1
try:
line_dict[file_type] += lines
except KeyError:
line_dict[file_type] = lines
if os.path.isdir(each):
Search_file(each)
os.chdir(os.pardir)
return tal_line
def show_file():
process = total_line / 100000 * 100
distance = 100000 - percentage
msg = '您目前累计编写了%s行代码,完成度%.2f%%\n离十万行代码还差%s行,请继续努力' % (total_lines,process,distance)
content = ''
for i in file_dict:
content += '【.%s】文件%s个,源代码%行\n' % (i,file_dict[i],line_dict[i])
g.textbox(msg,text=content)
line_dict = {}
file_dict = {}
code_path = g.diropenbox('请选择你的代码库')
os.chdir(code_path)
total_lines = Search_file()
show_file()
由于不能正常运行逻辑部分我也不敢确定正确,然后python给了一个报错提示:
C:\Users\Admin\AppData\Local\Programs\Python\Python38-32\python.exe D:/py文件/习题/当前代码量的总和.py
Traceback (most recent call last):
File "D:/py文件/习题/当前代码量的总和.py", line 47, in <module>
total_lines = Search_file()
File "D:/py文件/习题/当前代码量的总和.py", line 28, in Search_file
Search_file(each)
File "D:/py文件/习题/当前代码量的总和.py", line 28, in Search_file
Search_file(each)
File "D:/py文件/习题/当前代码量的总和.py", line 28, in Search_file
Search_file(each)
[Previous line repeated 991 more times]
File "D:/py文件/习题/当前代码量的总和.py", line 16, in Search_file
file_type = os.path.splitext(each)[1]
File "C:\Users\Admin\AppData\Local\Programs\Python\Python38-32\lib\ntpath.py", line 208, in splitext
return genericpath._splitext(p, '\\', '/', '.')
File "C:\Users\Admin\AppData\Local\Programs\Python\Python38-32\lib\genericpath.py", line 131, in _splitext
sepIndex = max(sepIndex, altsepIndex)
RecursionError: maximum recursion depth exceeded in comparison
本帖最后由 sunrise085 于 2020-10-13 09:58 编辑
你的程序问题在于Search_file函数的参数path你并没有用到,这就导致递归的时候传进去的子路径并没有被检索,一直使用的都是同一个目录,导致了无限递归,最终超出递归最大次数。。。 if os.path.isdir(each):
Search_file(each)#这里给出的参数each,在 Search_file函数中根本没有用到过,所以你递归的时候,其实还是在原路径下查询,这样一来就造成了无限递归
os.chdir(os.pardir)
修改方法有两种,前后调用的时候一致即可
第一种,修改递归的时候的代码,使其与最开始调用的时候方式一致,在递归前将当前路径改为子目录路径 if os.path.isdir(each):
os.chdir(each)
Search_file()
os.chdir(os.pardir)
第二种,修改Search_file函数,使其与递归时候调用方式一致,在Search_file中修改当前路径 code_path = g.diropenbox('请选择你的代码库')
os.chdir(code_path)#这一行作用hi设置当前工作路径,应该放到Search_file函数里面去
total_lines = Search_file()#这里给出调用参数,即total_lines = Search_file(code_path),在Search_file函数中最开始添加一行,用来设置当前工作路径os.chdir(path)
show_file()
以上是解决无限递归的问题。你的程序可能还有其他问题,你再看看吧。Search_file是有返回值的,但是递归的时候,你却没管返回值,我没有详细看,你自己检查一下
|
-
这是我用来测试运行的目录
|