| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
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) 那部分代码 放在函数外,所以函数的递归不会影响到该部分代码,只有递归结束后才显示结果 
 
 
 |   
 
 
 
 |