Введите 2 целых числа и получите двоичное, BRGC и расстояние Хэмминга
У меня есть все, кроме расстояния Хэмминга. Я продолжаю получать сообщение об ошибке "int() не может конвертировать не-строки с явным основанием"
вот мой код:
def int2bin(n):
if n:
bits = []
while n:
n,remainder = divmod(n, 2)
bits.insert(0, remainder)
return bits
else: return [0]
def bin2gray(bits):
return bits[:1] + [i ^ ishift for i, ishift in zip(bits[:-1], bits[1:])]
def hamming(a,b):
assert len(a) == len(b)
count,z = 0,int(a,2)^int(b,2)
while z:
count += 1
z &= z-1
return count
def main():
a = int(input("Positive integer 1: "))
b = int(input("Positive integer 2: "))
print('int:%2i binary:%12r BRGC:%12r' %
( a,
int2bin(a),
bin2gray(int2bin(a))
))
print('int:%2i binary:%12r BRGC:%12r' %
( b,
int2bin(b),
bin2gray(int2bin(b))
))
print('hamming|%2 %12r &12r' %
(hamming(int2bin(a),int2bin(b)),
hamming(bin2gray(int2bin(a)),bin2gray(int2bin(b)))
))
main()
вывод должен выглядеть так
int: 5 binary: [1, 0, 1] brgc: [1, 1, 1]
int: 6 binary: [1, 1, 0] brgc: [1, 0, 1]
hamming 2 1
пожалуйста помоги!
2 ответа
Попробуйте эту реализацию (a
а также b
ожидаются целые числа):
def hamming(a, b):
return bin(a^b).count('1')
Здесь я xor a
а также b
и получить двоичный файл, где единицы представляют собой разницу между a
а также b
, Чем я только считаю.
Этот код вычисляет расстояние Хэмминга для двух, возможно, довольно длинных строк.
def hammingDist(s1,s2):
if type(s1) is str: s1=s1.encode()
if type(s2) is str: s2=s2.encode()
count=0
for b1,b2 in zip(s1,s2):
a=b1^b2
while a>0:
count+= a & 1
a=a >> 1
return count
В функции hamming
,
count,z = 0,int(a,2)^int(b,2)
похоже, что вы передаете список целых чисел в качестве первых аргументов (a
а также b
) к функции int()
, Второй аргумент - ваша явная база. ты не можешь сделать это.
Попробуйте заменить a
с ''.join(str(el) for el in a)
и то же самое для b
,
В качестве альтернативы вы можете заменить функцию int2bin
с format(n, 'b')
чтобы получить двоичную строку напрямую.