You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 2计算图像黑色像素占比出错:预期80.0%却得0.0%求排查

黑色像素占比计算代码错误排查与修复

问题重现

你遇到的情况是:明明按照逻辑统计黑色像素(B)占比应该得到80.0%,但运行代码后输出却是0.0%。你的代码如下:

line1 = "BBBBBBBBBB"
line2 = "BBNNBBNNBB"
line3 = "BBNNBBNNBB"
line4 = "BBBBBBBBBB"
line5 = "BBBBNNBBBB"
line6 = "BBNBBBBNBB"
line7 = "BBBNNNNBBB"
line8 = "BBBBBBBBBB"
data = ["BBBBBBBBBB", "BBNNBBNNBB", "BBNNBBNNBB", "BBBBBBBBBB", "BBBBNNBBBB", "BBNBBBBNBB", "BBBNNNNBBB", "BBBBBBBBBB"]
def percentBlack(data):
    numB = 0
    numP = 0
    for line in data:
        for pixel in line:
            if pixel == "B":
                numB += 1
            numP += 1
    return round((numB/numP)*100,1)
print(percentBlack(data))

问题根源

出现这个错误最可能的原因是你在Python 2环境下运行这段代码。Python 2中整数之间的除法会执行「地板除」——直接舍弃小数部分。你的代码中总黑色像素numB=64,总像素numP=80,64/80在Python2中会得到0,乘以100后还是0,最终round(0,1)就输出0.0。

而在Python3中,整数除法默认返回浮点数,64/80=0.8,计算后就能得到预期的80.0%。

改进建议

有两种方式可以解决这个问题:

  • 方式一:强制浮点数除法(兼容Python2/3)
    在除法运算前把其中一个操作数转为浮点数,确保得到浮点数结果:
    return round((float(numB)/numP)*100,1)
    
    或者在代码最开头添加语句,让Python2的除法行为和Python3一致:
    from __future__ import division
    
    # 后续代码保持不变
    
  • 方式二:切换到Python3环境运行
    如果你的运行环境允许,直接用Python3执行代码即可——原逻辑本身是正确的,能直接输出80.0%。

另外可以快速验证下data列表是否确实包含了你需要的所有行(从你给出的代码看这部分是没问题的)。

内容的提问来源于stack exchange,提问作者Jenny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 06:28:28