Python统计数字二进制表示中1的个数时代码运行结果错误
问题说明
- 实现目标:接收用户输入的数值,统计其二进制(binary)表示中数字1的出现次数
- 原有错误实现代码:
print(str({int(input()):'b'}).count('1'))
- 异常表现:输入值为3时,输出结果为0,和预期结果不符。
错误原因
代码里的{int(input()):'b'}是Python字典字面量,会生成一个键为输入整数、值为字符串'b'的字典,根本没有执行整数转二进制的逻辑。比如输入3时,这个字典是{3: 'b'},转成字符串后内容为"{3: 'b'}",字符串里完全没有字符'1',调用count('1')自然返回0。
问题本质是混淆了字典字面量和字符串格式化的进制转换语法::b的进制转换占位符必须放在f-string字符串、str.format()方法或者format()函数里才会生效,直接写在大括号里只会被识别为字典结构。
修复代码
两种常用正确写法:
- 用内置
bin()函数实现,该函数会返回带0b前缀的二进制字符串,前缀不含'1'不影响计数:
print(bin(int(input())).count('1'))
- 用格式化语法直接生成不带前缀的二进制字符串:
print(f"{int(input()):b}".count('1'))
验证测试:输入3时,3的二进制是11,包含2个'1',上述代码运行后输出2,结果正确。
内容的提问来源于stack exchange,提问作者Mariana
相关产品推荐
相关产品推荐

