鱼C论坛

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

[已解决]逻辑错误

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


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


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

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

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

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

>>>

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

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


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


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

最佳答案

查看完整内容

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

使用道具 举报

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

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

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

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

>>>

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

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


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


e.msgbox("请打开您存放所有代码的文件夹……","统计代码量")
path = e.diropenbox("请选择您的代码库")
seach_file(path)
                 
想知道小甲鱼最近在做啥?请访问 -> 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, 2025-1-12 06:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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