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)来举例,我们一步步算:
range(6,12+1)生成的数字是:6、7、8、9、10、11、12,一共7个数字。- 逐个判断每个数字的布尔结果:
- 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
- 6 →
- 把这些数值加起来:
0+1+1+1+1+1+1=6,所以最终输出6,确实比总数量7小——因为数字6本身包含字符'6',被排除掉了。
简单来说,sum()在这里的作用就是统计生成器表达式中True的个数,也就是统计范围内不包含数字6的数的数量,而不是直接统计范围里的总数字数。
内容的提问来源于stack exchange,提问作者Ky1p
相关产品推荐
相关产品推荐

