热心市民K先森 发表于 2021-5-22 01:59:08

求助,关于python第35课作业easygui

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)
    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

热心市民K先森 发表于 2021-5-22 01:59:59

尴尬,图片怎么发哟,我以为是电脑地址{:10_266:}

热心市民K先森 发表于 2021-5-22 02:03:57

第一段代码
easygui显示内容
您目前共累积编写了 221 行代码,完成进度:0.22 %
离 10 万行代码还差 99779 行,请继续努力!
.cpp源文件19个,源代码221行
shell显示内容
{'.cpp': 19}
{'.cpp': 221}

热心市民K先森 发表于 2021-5-22 02:05:53

第一段代码执行四五次后
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}

热心市民K先森 发表于 2021-5-22 02:08:37

第二段代码
easygui显示内容
您目前共累积编写了 1360 行代码,完成进度:1.36 %
离 10 万行代码还差 98640 行,请继续努力!
.cpp源文件19个,源代码221行
.py源文件72个,源代码1139行
shell显示内容
{'.cpp': 19, '.py': 72}
{'.cpp': 221, '.py': 1139}

Twilight6 发表于 2021-5-22 14:44:37


第一个代码你将 g.textbox(total2, '统计结果', result) 等部分代码放入了函数中

而这个函数中有调用函数本身而进行递归操作,导致你每次进入递归都执行了 g.textbox(total2, '统计结果', result) 的部分代码,所以会一直弹窗

而第二个代码是将g.textbox(total2, '统计结果', result) 那部分代码 放在函数外,所以函数的递归不会影响到该部分代码,只有递归结束后才显示结果

热心市民K先森 发表于 2021-5-23 02:55:36

Twilight6 发表于 2021-5-22 14:44
第一个代码你将 g.textbox(total2, '统计结果', result) 等部分代码放入了函数中

而这个函数中有调用 ...

谢谢老师解答,懂了
页: [1]
查看完整版本: 求助,关于python第35课作业easygui