输入2个整数,得到二进制、brgc和hamming distan

2024-10-01 13:43:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我什么都有,除了哈明距离。我一直收到错误“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()

输出应该如下所示

^{pr2}$

请帮忙!在


Tags: inputlenreturnmaindefcountbitsint
3条回答

试试这个实现(ab应该是整数):

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

这里我异或a和{},得到二进制,其中1表示a和{}之间的差。而不是我只数一个。在

在函数hamming

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

看起来您将一个整数列表作为第一个参数(ab)传递给函数int()。第二个论点是你的明确基础。你不能这么做。在

尝试将a替换为''.join(str(el) for el in a),并对b使用相同的方法。在

或者,可以将函数int2bin替换为format(n, '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

相关问题 更多 >