统计指定范围内仅含6或仅含8的数字数量 Python代码问题求解
代码问题排查
你现有的代码存在以下几处错误:
- 遍历对象使用错误:for循环遍历的变量是
x(范围内的每个数字),但你的判断逻辑全部针对参数a(范围上限),完全没有用到遍历到的数字 - 语法逻辑错误:
6 and 8 in a的写法不符合Python逻辑规则,实际会先判断6的布尔值(恒为True),仅剩下8 in a的判断,完全无法实现「同时存在6和8」的判断逻辑 - 类型使用错误:
in运算符不能直接判断单个数字是否存在于整数中,需要先将数字转为字符串,判断字符是否存在于字符串中 - 逻辑缺失:没有过滤包含6/8之外其他数字的情况,例如16这类带其他数字的数值会被误统计
- return位置错误:return语句写在for循环内部,第一次循环执行完就会直接返回结果,无法完成全范围遍历
- 范围逻辑问题:
range(a)生成的是0到a-1的整数,如果你需要统计1到a范围内的数值,需要改为range(1, a+1)
修正后可用代码
def countnums(a): count = 0 # 遍历1到a的所有整数 for num in range(1, a + 1): num_str = str(num) # 判断是否仅包含6 或 仅包含8 only_6 = all(char == '6' for char in num_str) only_8 = all(char == '8' for char in num_str) if only_6 or only_8: count += 1 return count # 测试调用,输出4,对应符合要求的数字:6、8、66、88 print(countnums(88))
相关基础学习建议
重点巩固以下Python基础知识点即可避免类似问题:
- Python缩进规则:Python依靠缩进区分代码块,函数体、循环体、判断分支下的代码都需要正确缩进
- 流程控制语法:for循环的执行逻辑、return语句的作用范围
- 运算符规范:逻辑运算符and/or的正确写法、in运算符的适用场景
- 基础数据类型操作:整数与字符串的类型转换、字符串遍历方法、all()/any()内置函数的用法
内容的提问来源于stack exchange,提问作者k90wd
相关产品推荐
相关产品推荐

