《三十五讲课后作业第4题》对于我所写代码的疑惑
import osimport 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 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) 有几个问题,函数里面写了 return 但是你调用的时候并没有赋值给任何变量
count count1 似乎在 search 函数里面会被更新,serach 迭代,把这两个变量作为全局变量就可以了 另外,其实不需要迭代的,可以使用 os.walk(path) 让程序自己搜索所有的子文件夹里面的内容
页:
[1]