Python二进制补充

时间:2013-06-13 19:26:02

标签: python python-2.7

我想添加2个二进制数,但是我的程序无法正常工作。请查看我的代码并告知我任何错误。谢谢。 这是代码:

import time
n=0
while n!=1:
    error1=True
    while error1:
        try:
            bin2dec = raw_input("Please enter a binary number: ")
            bin2dec2 = raw_input("Please enter a binary number: ")
            error1=False
        except NameError:
            print"Enter a Binary number. Please try again.\n"
            time.sleep(0.5)
        except SyntaxError:
            print"Enter a Binary number. Please try again.\n"
            time.sleep(0.5)


    decnum=0

    for i in bin2dec: 
        decnum = decnum * 2 + int(i)

    decnum2=0

    for i in bin2dec2: 
        decnum2 = decnum2 * 2 + int(i)
        dectotal=decnum+decnum2
        b = ''            
        b = str(dectotal % 2) + b
        dectotal >>= 1
        print b,
    print"<<This is your answer"

1 个答案:

答案 0 :(得分:1)

以下代码应该非常适合您的要求,而且要短得多:

print (lambda x,y: bin(int(x,2)+int(y,2))[2:])(raw_input(),raw_input())

以下情况会更好:

a="Enter Number";ri=raw_input;print "Sum: "+(lambda x,y: bin(int(x,2)+int(y,2))[2:])(ri(a+' 1: '),ri(a+' 2: '))

由于您无法使用bin或dec,请尝试以下操作。它不使用bin,也不使用dec。它也不使用变量赋值,def语句,多个语句或int。实际上,它甚至不使用数字本身的内置加法,乘法或除法:

print "Sum: "+(lambda q: "".join(reversed([ (lambda n: n[0+(None!=q.__setitem__(0,n[1]))])
((lambda x,y,z: (lambda v: (str(v%2),str(v/2)))
((ord(x)-48)+(ord(y)-48)+(ord(z)-48)))(x,y,q[0])) 
for x,y in reversed(zip(raw_input("Enter Number 1: ").zfill(16),
raw_input("Enter Number 2: ").zfill(16)))])))(['0'])

请注意,虽然这有效,但我鼓励您对其进行检查,如果您将其作为考试答案提交,我对由于愤怒的审查员对您造成的任何损失或伤害不承担任何责任。