【问题标题】:Converting integer to bits: TypeError: string indices must be integers - Python3将整数转换为位:TypeError:字符串索引必须是整数 - Python3
【发布时间】:2020-10-05 13:51:20
【问题描述】:

我正在尝试运行这个程序来计算ints 的位表示中的那些。代码如下:

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

【问题讨论】:

  • 试试if bits[int(i)] == 1:
  • bits[i] 的类型是整数,尝试转换,或者字符串化== '1'

标签: python python-3.x integer bit


【解决方案1】:

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

简单的解决方案:

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

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


然而,更好、更符合 Python 的解决方案是使用位移位和生成器在数学上做到这一点:

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

counter = sum(bits(n))

【讨论】:

    【解决方案2】:

    因为你迭代了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" 进行比较。

    【讨论】:

      猜你喜欢
      • 2017-09-07
      • 1970-01-01
      • 1970-01-01
      • 2021-03-28
      • 2021-04-28
      • 2020-06-24
      • 2016-03-26
      • 2018-08-19
      相关资源
      最近更新 更多