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"
进行比较。
我正在尝试 运行 这个计算 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"
进行比较。