-9

2 つの 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"
4

1 に答える 1

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'])

これは機能しますが、調査することをお勧めしますが、試験の回答として提出した場合、怒った試験官によってポイントが失われたり、怪我をしたりしても、私は責任を負いません。

于 2013-06-13T19:33:23.190 に答える