|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
import os
import easygui as g
def searchfile(startdir):
os.chdir(startdir)
for eachfile in os.listdir(os.curdir):
TYPE = os.path.splitext(eachfile)[1]
if os.path.isfile(eachfile) and TYPE in target:
lines = 0
for eachline in eachfile:
lines += 1
try:
filenum[TYPE] += 1
except KeyError:
filenum[TYPE] = 1
try:
filelinenum[TYPE] += lines
except KeyError:
filelinenum[TYPE] = lines
elif os.path.isdir(eachfile):
searchfile(eachfile)
os.chdir(os.pardir)
total = 0
result = ''
total2 = ''
print(filenum)
print(filelinenum)
for Type in filelinenum:
total += filelinenum[Type]
result += ('%s源文件%d个,源代码%d行\n'% (Type, filenum[Type], filelinenum[Type]))
total2 = '您目前共累积编写了 %d 行代码,完成进度:%.2f %%\n离 10 万行代码还差 %d 行,请继续努力!' % (total, total / 1000, 100000 - total)
g.textbox(total2,'统计结果',result)
startdir = g.diropenbox('请输入你想检查代码的地址:','检查代码')
target = ('.py','.cpp')
filenum = {}
filelinenum = {}
searchfile(startdir)
我用以上代码检查我的文件,结果却执行了很多次才全部统计完,按一次OK就执行一次,执行了四五次
C:\Users\Administrator\Desktop\QQ截图20210522014759
C:\Users\Administrator\Desktop\QQ截图20210522014848
后来我把代码换了一下位置
import os
import easygui as g
def searchfile(startdir):
os.chdir(startdir)
for eachfile in os.listdir(os.curdir):
TYPE = os.path.splitext(eachfile)[1]
if os.path.isfile(eachfile) and TYPE in target:
lines = 0
for eachline in eachfile:
lines += 1
try:
filenum[TYPE] += 1
except KeyError:
filenum[TYPE] = 1
try:
filelinenum[TYPE] += lines
except KeyError:
filelinenum[TYPE] = lines
elif os.path.isdir(eachfile):
searchfile(eachfile)
os.chdir(os.pardir)
startdir = g.diropenbox('请输入你想检查代码的地址:','检查代码')
target = ('.py','.cpp')
filenum = {}
filelinenum = {}
searchfile(startdir)
total = 0
result = ''
total2 = ''
print(filenum)
print(filelinenum)
for Type in filelinenum:
total += filelinenum[Type]
result += ('%s源文件%d个,源代码%d行\n'% (Type, filenum[Type], filelinenum[Type]))
total2 = '您目前共累积编写了 %d 行代码,完成进度:%.2f %%\n离 10 万行代码还差 %d 行,请继续努力!' % (total, total / 1000, 100000 - total)
g.textbox(total2,'统计结果',result)
结果就执行一次就全部统计完了,求大佬指点一下,为什么会这个样子呢?
C:\Users\Administrator\Desktop\QQ截图20210522015341
第一个代码你将 g.textbox(total2, '统计结果', result) 等部分代码放入了函数中
而这个函数中有调用函数本身而进行递归操作,导致你每次进入递归都执行了 g.textbox(total2, '统计结果', result) 的部分代码,所以会一直弹窗
而第二个代码是将 g.textbox(total2, '统计结果', result) 那部分代码 放在函数外,所以函数的递归不会影响到该部分代码,只有递归结束后才显示结果
|
|