求助,关于python第35课作业easygui
import osimport easygui as g
def searchfile(startdir):
os.chdir(startdir)
for eachfile in os.listdir(os.curdir):
TYPE = os.path.splitext(eachfile)
if os.path.isfile(eachfile) and TYPE in target:
lines = 0
for eachline in eachfile:
lines += 1
try:
filenum += 1
except KeyError:
filenum = 1
try:
filelinenum += lines
except KeyError:
filelinenum = 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
result += ('%s源文件%d个,源代码%d行\n'% (Type, filenum, filelinenum))
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)
if os.path.isfile(eachfile) and TYPE in target:
lines = 0
for eachline in eachfile:
lines += 1
try:
filenum += 1
except KeyError:
filenum = 1
try:
filelinenum += lines
except KeyError:
filelinenum = 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
result += ('%s源文件%d个,源代码%d行\n'% (Type, filenum, filelinenum))
total2 = '您目前共累积编写了 %d 行代码,完成进度:%.2f %%\n离 10 万行代码还差 %d 行,请继续努力!' % (total, total / 1000, 100000 - total)
g.textbox(total2,'统计结果',result)
结果就执行一次就全部统计完了,求大佬指点一下,为什么会这个样子呢?
C:\Users\Administrator\Desktop\QQ截图20210522015341 尴尬,图片怎么发哟,我以为是电脑地址{:10_266:} 第一段代码
easygui显示内容
您目前共累积编写了 221 行代码,完成进度:0.22 %
离 10 万行代码还差 99779 行,请继续努力!
.cpp源文件19个,源代码221行
shell显示内容
{'.cpp': 19}
{'.cpp': 221}
第一段代码执行四五次后
easygui显示内容
您目前共累积编写了 1360 行代码,完成进度:1.36 %
离 10 万行代码还差 98640 行,请继续努力!
.cpp源文件19个,源代码221行
.py源文件72个,源代码1139行
shell显示内容
{'.cpp': 19}
{'.cpp': 221}
{'.cpp': 19, '.py': 48}
{'.cpp': 221, '.py': 816}
{'.cpp': 19, '.py': 71}
{'.cpp': 221, '.py': 1126}
{'.cpp': 19, '.py': 72}
{'.cpp': 221, '.py': 1139}
{'.cpp': 19, '.py': 72}
{'.cpp': 221, '.py': 1139} 第二段代码
easygui显示内容
您目前共累积编写了 1360 行代码,完成进度:1.36 %
离 10 万行代码还差 98640 行,请继续努力!
.cpp源文件19个,源代码221行
.py源文件72个,源代码1139行
shell显示内容
{'.cpp': 19, '.py': 72}
{'.cpp': 221, '.py': 1139}
第一个代码你将 g.textbox(total2, '统计结果', result) 等部分代码放入了函数中
而这个函数中有调用函数本身而进行递归操作,导致你每次进入递归都执行了 g.textbox(total2, '统计结果', result) 的部分代码,所以会一直弹窗
而第二个代码是将g.textbox(total2, '统计结果', result) 那部分代码 放在函数外,所以函数的递归不会影响到该部分代码,只有递归结束后才显示结果 Twilight6 发表于 2021-5-22 14:44
第一个代码你将 g.textbox(total2, '统计结果', result) 等部分代码放入了函数中
而这个函数中有调用 ...
谢谢老师解答,懂了
页:
[1]