我总得懂点什么 发表于 2021-2-9 12:28:41

《三十五讲课后作业第4题》对于我所写代码的疑惑

import os

import easygui as g

def search(start_path):

    count = 0   #统计文件数量

    count1 = 0   #统计行数
   
    os.chdir(start_path)

    each_file = os.listdir(os.curdir)

    for each in each_file:

      if os.path.isfile(each):

            extension = os.path.splitext(each)

            if extension == '.py':

                count += 1

                try:

                  with open(each) as f:

                        for each_line in f:

                            count1 += 1
                           
                except (PermissionError, UnicodeDecodeError):

                  pass

      if os.path.isdir(each):

            search(each)

            os.chdir(os.pardir)

    global a

    a = (count,count1)

    return a

start_path = g.enterbox('请输入查找的初始目录:')

search(start_path)

count2 = a /100000 * 100

msg = '文件有%d个,一共%d行,已完成%d '%(a,a,count2)

g.msgbox(msg)

            


代码运行过后,并没有找到任何一个符合的文件,但我打开查找的目录中却有。是变量的作用域搞错了嘛?哪该如何避免?如果不是,请大佬指正,阿里嘎多!{:5_108:}

Daniel_Zhang 发表于 2021-2-9 12:55:56

本帖最后由 Daniel_Zhang 于 2021-2-9 13:00 编辑

不知道是因为什么,没仔细看,有可能是作用域问题,你自己看看喔,该你改好了

import os

import easygui as g

count = 0   #统计文件数量

count1 = 0   #统计行数


def search(start_path):

    global count, count1
   
    os.chdir(start_path)

    each_file = os.listdir(os.curdir)

    for each in each_file:

      if os.path.isfile(each):

            extension = os.path.splitext(each)

            if extension == '.py':
                print(each)
                count += 1

                try:

                  with open(each) as f:

                        for each_line in f:

                            count1 += 1
                           
                except (PermissionError, UnicodeDecodeError):

                  pass

      if os.path.isdir(each):

            search(each)

            os.chdir(os.pardir)

start_path = g.enterbox('请输入查找的初始目录:')

search(start_path)

count2 = count1 /100000 * 100

msg = '文件有%d个,一共%d行,已完成 %d%%'%(count,count1,count2)

g.msgbox(msg)

Daniel_Zhang 发表于 2021-2-9 13:05:59

有几个问题,函数里面写了 return 但是你调用的时候并没有赋值给任何变量

count count1 似乎在 search 函数里面会被更新,serach 迭代,把这两个变量作为全局变量就可以了

Daniel_Zhang 发表于 2021-2-9 13:08:53

另外,其实不需要迭代的,可以使用 os.walk(path) 让程序自己搜索所有的子文件夹里面的内容
页: [1]
查看完整版本: 《三十五讲课后作业第4题》对于我所写代码的疑惑