什么';我的python代码(添加二进制代码)有什么问题?

什么';我的python代码(添加二进制代码)有什么问题?,python,Python,这是leetcode中一个非常简单的问题: 给定两个二进制字符串,返回它们的和(也是一个二进制字符串) 例如,a=“11”b=“1”Return“100” 这是我的密码,我想没问题 def addBinary(self, a, b): if len(a) < len(b): a, b = b, a rev, temp, sum = list(a[::-1]), 0, "" for i,

这是leetcode中一个非常简单的问题:

给定两个二进制字符串,返回它们的和(也是一个二进制字符串)

例如,a=“11”b=“1”Return“100”

这是我的密码,我想没问题

def addBinary(self, a, b):
    if len(a) < len(b):
        a, b = b, a
            
    rev, temp, sum = list(a[::-1]), 0, ""
        
    for i, j in enumerate(b[::-1]):
        temp = temp + int(rev[i]) + int(j)
        if temp == 0 or 1:
            rev[i] = str(temp)
            temp = 0
            x2 = temp
        elif temp == 2:
            rev[i] = "0"
            temp = 1
            
    if temp == 1:
        rev = rev + ["1"]
        
    for digit in rev[::-1]:
        sum += digit
        
    return sum
def addBinary(self,a,b):
如果len(a)
然而,当我运行时,测试无法通过

输入:“1”、“1”

产出:“2”

预期:“10”

我只是不知道为什么,设置了一个断点,发现虽然“temp=temp+int(rev[I])+int(j)”,temp等于2,但它没有进入条件的elif部分,因此返回“2”作为最终结果

谁能告诉我为什么?我真的很感激。

你打字有误

if temp == 0 or 1:
应改为:

if temp == 0 or temp == 1:

一种简单且更具Python风格的方法是:

def add_binary(a, b):
    return bin(int(a) + int(b))[2:]

print add_binary("1", "1")
>>> 10

如果temp==0或1:
不会做您认为它会做的事情。有关详细信息,请参阅复制品。@PaulSasik:不,应该是“10”。“100”是输入“11”和“1”的预期输出。@PaulSasik你对Python二进制算法有怀疑吗?@anmol_uppal:没有,我怀疑你为什么选择了与OP不同的输入集?@PaulSasik:进一步看问题。“1”和“1”是特定的失败测试用例。@PaulSasik因为OP给出了两个示例输入,而我刚刚尝试了后一个,请阅读问题的底线。非常感谢,如果(0,1)
中的temp也不错,也许我也应该()它们。