鱼C论坛

 找回密码
 立即注册
查看: 1431|回复: 3

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

[复制链接]
发表于 2021-2-9 12:28:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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)[1]

            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[1] /100000 * 100

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

g.msgbox(msg)

            

代码运行过后,并没有找到任何一个符合的文件,但我打开查找的目录中却有。是变量的作用域搞错了嘛?哪该如何避免?如果不是,请大佬指正,阿里嘎多!
最佳答案
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)[1]

            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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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)[1]

            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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-9 13:05:59 | 显示全部楼层
有几个问题,函数里面写了 return 但是你调用的时候并没有赋值给任何变量

count count1 似乎在 search 函数里面会被更新,serach 迭代,把这两个变量作为全局变量就可以了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-9 13:08:53 | 显示全部楼层
另外,其实不需要迭代的,可以使用 os.walk(path) 让程序自己搜索所有的子文件夹里面的内容
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 13:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表