鱼C论坛

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

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

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

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

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

x
  1. import os

  2. import easygui as g

  3. def search(start_path):

  4.     count = 0   #统计文件数量

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

  8.     each_file = os.listdir(os.curdir)

  9.     for each in each_file:

  10.         if os.path.isfile(each):

  11.             extension = os.path.splitext(each)[1]

  12.             if extension == '.py':

  13.                 count += 1

  14.                 try:

  15.                     with open(each) as f:

  16.                         for each_line in f:

  17.                             count1 += 1
  18.                            
  19.                 except (PermissionError, UnicodeDecodeError):

  20.                     pass

  21.         if os.path.isdir(each):

  22.             search(each)

  23.             os.chdir(os.pardir)

  24.     global a

  25.     a = (count,count1)

  26.     return a

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

  28. search(start_path)

  29. count2 = a[1] /100000 * 100

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

  31. g.msgbox(msg)

  32.             
复制代码


代码运行过后,并没有找到任何一个符合的文件,但我打开查找的目录中却有。是变量的作用域搞错了嘛?哪该如何避免?如果不是,请大佬指正,阿里嘎多!
最佳答案
2021-2-9 12:55:56
本帖最后由 Daniel_Zhang 于 2021-2-9 13:00 编辑

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

  1. import os

  2. import easygui as g

  3. count = 0   #统计文件数量

  4. count1 = 0   #统计行数


  5. def search(start_path):

  6.     global count, count1
  7.    
  8.     os.chdir(start_path)

  9.     each_file = os.listdir(os.curdir)

  10.     for each in each_file:

  11.         if os.path.isfile(each):

  12.             extension = os.path.splitext(each)[1]

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

  16.                 try:

  17.                     with open(each) as f:

  18.                         for each_line in f:

  19.                             count1 += 1
  20.                            
  21.                 except (PermissionError, UnicodeDecodeError):

  22.                     pass

  23.         if os.path.isdir(each):

  24.             search(each)

  25.             os.chdir(os.pardir)

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

  27. search(start_path)

  28. count2 = count1 /100000 * 100

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

  30. g.msgbox(msg)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-2-9 12:55:56 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Daniel_Zhang 于 2021-2-9 13:00 编辑

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

  1. import os

  2. import easygui as g

  3. count = 0   #统计文件数量

  4. count1 = 0   #统计行数


  5. def search(start_path):

  6.     global count, count1
  7.    
  8.     os.chdir(start_path)

  9.     each_file = os.listdir(os.curdir)

  10.     for each in each_file:

  11.         if os.path.isfile(each):

  12.             extension = os.path.splitext(each)[1]

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

  16.                 try:

  17.                     with open(each) as f:

  18.                         for each_line in f:

  19.                             count1 += 1
  20.                            
  21.                 except (PermissionError, UnicodeDecodeError):

  22.                     pass

  23.         if os.path.isdir(each):

  24.             search(each)

  25.             os.chdir(os.pardir)

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

  27. search(start_path)

  28. count2 = count1 /100000 * 100

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

  30. g.msgbox(msg)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

count count1 似乎在 search 函数里面会被更新,serach 迭代,把这两个变量作为全局变量就可以了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-28 00:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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