ingrese 2 enteros y obtenga la distancia binaria, brgc y hamming

Tengo todo excepto la distancia de Hamming. Sigo recibiendo el error “int () no puede convertir una cadena sin base explícita”

Aquí está mi código:

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() 

la salida debe verse como

 int: 5 binary: [1, 0, 1] brgc: [1, 1, 1] int: 6 binary: [1, 1, 0] brgc: [1, 0, 1] hamming 2 1 

¡por favor ayuda!

Pruebe esta implementación (se espera que a y b sean enteros):

 def hamming(a, b): return bin(a^b).count('1') 

Aquí, xor a y b y obtengo binario donde unos representan diferencias entre a y b . Que yo solo cuento unos.

En la función hamming ,

 count,z = 0,int(a,2)^int(b,2) 

Parece que está pasando una lista de enteros como los primeros argumentos ( b ) a la función int() . El segundo argumento es tu base explícita. no puedes hacer esto

Intente reemplazar a con ''.join(str(el) for el in a) y lo mismo para b .

Alternativamente, puede reemplazar la función int2bin con format(n, 'b') para obtener una cadena binaria directamente.

Este código calcula la distancia de Hamming de dos cadenas posiblemente bastante largas.

 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