python - 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,程序继续运行。
解决方案
问题在这里:
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.
推荐阅读
- microsoft-graph-api - 逻辑应用程序中的图形分页
- flutter - Flutter Google 登录 - 此应用未验证错误
- javafx - 如何将数据从子 JFXDrawer 控制器传递到驻留在 JavaFX 中的父控制器中的节点?
- javascript - 如何从 JavaScript 构造函数中的 forEach 循环内部调用嵌套函数?
- c# - 是否可以禁用控件但仍接收该控件的事件?
- javascript - 如何从父对象返回子对象数组
- javascript - 使用 JavaScript 填充 MaterializeCSS 中的选择元素
- node.js - AWS SAM Local + DynamoDB Local
- terraform - 无法在创建虚拟机时使用副本 - Terraform
- elastic-stack - 如何使用 grok 解析日期模式