首页 > 解决方案 > TypeError:在“str”和“int”的实例之间不支持“>”以显示二进制中 1 的数量

问题描述

我正在尝试使用布尔逻辑通过迭代在 2 个数字之间执行按位和运算,以找到二进制中 1 的数量。

import string

def main():
    binary_1 = input("Enter a number in terms of binary: ")
    binary_1 = str(binary_1)
    denary_1 = int(binary_1, 2)
    denary_2 = int(denary_1 - 1)

    count = 0

    while denary_1 > 0:
        denary_1 = bin(denary_1 & denary_2)
        count = count + 1

    print (count)

main()

程序运行时:

Enter a number in terms of binary: 1001
Traceback (most recent call last):
  File "C:/Users/Owner/Documents/University/Summer work/Introduction to Python/Extra work/count_number_of_1s_7.py", line 17, in <module>
    main()
  File "C:/Users/Owner/Documents/University/Summer work/Introduction to Python/Extra work/count_number_of_1s_7.py", line 11, in main
    while denary_1 > 0:
TypeError: '>' not supported between instances of 'str' and 'int'

我期待程序输出一行说明二进制中 1 的数量。

我对程序做了一些修改:

import string

def main():
    binary_1 = input("Enter a number in terms of binary: ")
    denary_1 = int(binary_1, 2)
    denary_2 = denary_1 - 1

    count = 0

    while denary_1 > 0:
        denary_1 = denary_1 & denary_2
        count = count + 1

    print (count)

main()

运行程序后,它似乎被冻结了:输入一个二进制数:1001,程序继续运行。

标签: python

解决方案


问题在这里:

denary_1 = bin(denary_1 & denary_2)

通过第二次迭代,类型已更改为字符串格式。

关于 bin:https ://docs.python.org/3/library/functions.html#bin

你应该这样做以获得正确的计数(Brian Kernighan's Algorithm):

denary_1 = denary_1 & (denary_1-1)  # resets the last bit set.

推荐阅读