Converting integer to bits: TypeError: string indices must be integers - Python3

Converting integer to bits: TypeError: string indices must be integers - Python3

我正在尝试 运行 这个计算 int 的位表示形式的程序。这是代码:

def count_bits(n):
    return bin(n).replace("0b", "")
            
bits = count_bits(3)
for i in bits:
    if bits[i] == 1:
        counter += 1
    else:
        counter = counter

但是当我尝试 运行 它时,出现以下错误:

    if bits[i] == 1:
TypeError: string indices must be integers

您正在遍历 bits,它是一个字符串,因此您的 i 假定该字符串中字符的值。您需要先将所有字符转换为整数,或者找到一种更好的方法来迭代这些位。

简单的解决方案:

def count_bits(n):
    return list(map(int, bin(n).replace("0b", "")))

或者您可以使用 bits[int(i)].


然而,更好更 pythonic 的解决方案是使用位移和生成器以数学方式完成此操作:

def bits(n):
    while n:
        yield n & 1
        n >>= 1

counter = sum(bits(n))

因为你遍历了 bits,这是一个字符串,i 也将是一个字符串,你将它与 1 进行比较,这是一个 int。你需要做这样的事情

def count_bits(n):
    return bin(n).replace("0b", "");

bits = count_bits(3);
for i in range(len(bits)):
    if bits[i] == 1:
        counter += 1;
    else:
        counter = counter;

所以 i 将是一个 int,你将它转换为 int 1,或者类似这样的

def count_bits(n):
    return bin(n).replace("0b", "");
            
bits = count_bits(3);
for i in bits:
    if bits[i] == "1":
        counter += 1;
    else:
        counter = counter;

所以 i 将是一个 string,就像原来一样,但你将它与 string "1" 进行比较。