2015-11-12 4 views
2

У меня есть все, кроме расстояния от хамминга. Я постоянно получаю сообщение об ошибке «Int() не может преобразовать нестроковые с явным основанием»ввод 2 целых числа и получение двоичного, brgc и расстояния hamming

вот мой код:

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 

, пожалуйста, помогите!

ответ

0

В функции 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'), чтобы получить двоичную строку напрямую.

5

Попробуйте эту реализацию (a и b ожидаются целые числа):

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

Здесь я XOR a и b и получить двоичный файл, где из них представляют differense между a и b. Чем я просто считаю.