鱼C论坛

 找回密码
 立即注册
查看: 864|回复: 5

[已解决]逻辑错误

[复制链接]
发表于 2022-2-18 13:06:41 | 显示全部楼层 |阅读模式
5鱼币
此代码无法统计文件中代码量,不知何处出现问题,还请大佬赐教
  1. import easygui as e
  2. import os
  3. def sum_lines(file):
  4.    lines = 0
  5.    with open(file) as f:
  6.        try:
  7.            for e in f:
  8.                lines += 1
  9.        except UnicodeDecodeError:
  10.             pass
  11.            
  12.            
  13.    return lines


  14. def seach_file(file_name):
  15.    
  16.     count=b=c=a=0
  17.     file = os.walk(file_name)
  18.     for each in file:
  19.         for i in each[2]:
  20.             file_new = os.path.join(each[0],i)
  21.             num = sum_lines(file_new)
  22.             if os.path.splitext(i) == '.c':
  23.                 count += 1
  24.                 b += num
  25.             if os.path.splitext(i) == '.py':
  26.                 c += 1
  27.                 a += num
  28.     total = b + a
  29.     msg = '【.c】源文件%d个,源代码%d行\n【.py】源文件%d个,源代码%d行'%(count,b,c,a)
  30.     title = '您目前共累计编写%d行代码,完成进度:%.2f%%\n离10万行代码还差%d行,请继续努力!'%(total,total/100000,100000-total)
  31.     e.msgbox(msg,title)


  32. e.msgbox("请打开您存放所有代码的文件夹……","统计代码量")
  33. path = e.diropenbox("请选择您的代码库")
  34. seach_file(path)
  35.                  
复制代码
最佳答案
2022-2-18 13:06:42
本帖最后由 isdkz 于 2022-2-18 13:20 编辑

  1. >>> help('os.path.splitext')
  2. Help on function splitext in os.path:

  3. os.path.splitext = splitext(p)
  4.     Split the extension from a pathname.

  5.     Extension is everything from the last dot to the end, ignoring
  6.     leading dots.  Returns "(root, ext)"; ext may be empty.

  7. >>>
复制代码


要善用 help() 函数,还有学习英语很重要

从上面可以看到 Returns "(root, ext)",splitext返回的是一个元组,元组的第二个元素才是扩展名,
所以改成下面这样:
  1. import easygui as e
  2. import os
  3. def sum_lines(file):
  4.    lines = 0
  5.    with open(file) as f:
  6.        try:
  7.            for e in f:
  8.                lines += 1
  9.        except UnicodeDecodeError:
  10.             pass
  11.            
  12.            
  13.    return lines


  14. def seach_file(file_name):
  15.    
  16.     count=b=c=a=0
  17.     file = os.walk(file_name)
  18.     for each in file:
  19.         for i in each[2]:
  20.             file_new = os.path.join(each[0],i)
  21.             num = sum_lines(file_new)
  22.             if os.path.splitext(i)[1] == '.c':                 # 因为splittext返回的是一个元组,所以加上[1]
  23.                 count += 1
  24.                 b += num
  25.             if os.path.splitext(i)[1] == '.py':                              # 加上[1]
  26.                 c += 1
  27.                 a += num
  28.     total = b + a
  29.     msg = '【.c】源文件%d个,源代码%d行\n【.py】源文件%d个,源代码%d行'%(count,b,c,a)
  30.     title = '您目前共累计编写%d行代码,完成进度:%.2f%%\n离10万行代码还差%d行,请继续努力!'%(total,total/100000,100000-total)
  31.     e.msgbox(msg,title)


  32. e.msgbox("请打开您存放所有代码的文件夹……","统计代码量")
  33. path = e.diropenbox("请选择您的代码库")
  34. seach_file(path)
  35.                  
复制代码

最佳答案

查看完整内容

要善用 help() 函数,还有学习英语很重要 从上面可以看到 Returns "(root, ext)",splitext返回的是一个元组,元组的第二个元素才是扩展名, 所以改成下面这样:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-2-18 13:06:42 | 显示全部楼层    本楼为最佳答案   
本帖最后由 isdkz 于 2022-2-18 13:20 编辑

  1. >>> help('os.path.splitext')
  2. Help on function splitext in os.path:

  3. os.path.splitext = splitext(p)
  4.     Split the extension from a pathname.

  5.     Extension is everything from the last dot to the end, ignoring
  6.     leading dots.  Returns "(root, ext)"; ext may be empty.

  7. >>>
复制代码


要善用 help() 函数,还有学习英语很重要

从上面可以看到 Returns "(root, ext)",splitext返回的是一个元组,元组的第二个元素才是扩展名,
所以改成下面这样:
  1. import easygui as e
  2. import os
  3. def sum_lines(file):
  4.    lines = 0
  5.    with open(file) as f:
  6.        try:
  7.            for e in f:
  8.                lines += 1
  9.        except UnicodeDecodeError:
  10.             pass
  11.            
  12.            
  13.    return lines


  14. def seach_file(file_name):
  15.    
  16.     count=b=c=a=0
  17.     file = os.walk(file_name)
  18.     for each in file:
  19.         for i in each[2]:
  20.             file_new = os.path.join(each[0],i)
  21.             num = sum_lines(file_new)
  22.             if os.path.splitext(i)[1] == '.c':                 # 因为splittext返回的是一个元组,所以加上[1]
  23.                 count += 1
  24.                 b += num
  25.             if os.path.splitext(i)[1] == '.py':                              # 加上[1]
  26.                 c += 1
  27.                 a += num
  28.     total = b + a
  29.     msg = '【.c】源文件%d个,源代码%d行\n【.py】源文件%d个,源代码%d行'%(count,b,c,a)
  30.     title = '您目前共累计编写%d行代码,完成进度:%.2f%%\n离10万行代码还差%d行,请继续努力!'%(total,total/100000,100000-total)
  31.     e.msgbox(msg,title)


  32. e.msgbox("请打开您存放所有代码的文件夹……","统计代码量")
  33. path = e.diropenbox("请选择您的代码库")
  34. seach_file(path)
  35.                  
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-2-18 13:26:41 | 显示全部楼层
isdkz 发表于 2022-2-18 13:19
要善用 help() 函数,还有学习英语很重要

从上面可以看到 Returns "(root, ext)",splitext返回的是 ...

所得寺内、
淦泻
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-2-18 14:06:16 | 显示全部楼层
不弃_ 发表于 2022-2-18 13:26
所得寺内、
淦泻

还有一个问题:完成进度:%.2f%%,这个格式化字符串有点宽不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-2-18 14:07:49 | 显示全部楼层
isdkz 发表于 2022-2-18 13:06
要善用 help() 函数,还有学习英语很重要

从上面可以看到 Returns "(root, ext)",splitext返回的是 ...

还有一个问题:完成进度:%.2f%%,这个格式化字符串有点宽不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-2-18 14:16:32 | 显示全部楼层
本帖最后由 isdkz 于 2022-2-18 14:17 编辑
不弃_ 发表于 2022-2-18 14:07
还有一个问题:完成进度:%.2f%%,这个格式化字符串有点宽不懂


f 代表浮点型,也就是小数,.2 是小数点后保留两位小数,
两个%是取消%的特殊效果,类似转义的功能,%% 也就是直接显示 %,

关于python格式化字符串的方式,你可以看看这一篇文章:
https://mp.weixin.qq.com/s/mpjDJ50T5ZjskKIIZO6_vQ
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-14 11:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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