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

Python中sum()函数在no_six_in_range函数中的工作原理问询

嘿,我来帮你把这段代码里sum()的工作原理拆解得明明白白,搞清楚为什么结果会比范围里的数字总数小~

先复盘你的代码逻辑

首先看你写的这段代码:

def no_six_in_range(start, end):
    print(sum('6' not in str(i) for i in range(start, end + 1)))

no_six_in_range(6, 12)

核心是里面的生成器表达式:'6' not in str(i) for i in range(start, end + 1),它会遍历[start, end]里的每一个数字,逐个判断这个数字转成字符串后是否不包含字符'6',返回的是一串布尔值(True或False)。

sum()在这里的具体工作机制

你已经知道sum()是求可迭代对象所有元素的总和,但这里的关键是:Python里的布尔值本质上是整数的子类——True等价于1,False等价于0。所以sum()在处理这些布尔值的时候,会自动把它们转换成对应的整数再相加。

拿你调用的no_six_in_range(6,12)来举例,我们一步步算:

  1. range(6,12+1)生成的数字是:6、7、8、9、10、11、12,一共7个数字。
  2. 逐个判断每个数字的布尔结果:
    • 6 → str(6)='6' → '6' not in '6' → False → 对应数值0
    • 7 → '6' not in '7' → True → 对应数值1
    • 8 → True → 1
    • 9 → True → 1
    • 10 → '6' not in '10' → True →1
    • 11 → True →1
    • 12 → True →1
  3. 把这些数值加起来:0+1+1+1+1+1+1=6,所以最终输出6,确实比总数量7小——因为数字6本身包含字符'6',被排除掉了。

简单来说,sum()在这里的作用就是统计生成器表达式中True的个数,也就是统计范围内不包含数字6的数的数量,而不是直接统计范围里的总数字数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 16:48:13