繁体   English   中英

如何在代码中修复Python二进制加法错误

[英]How would I fix the Python Binary Addition bug in my code

大家好,这是我编写的代码。 但是,它确实按预期工作,而不是输出转换后的二进制数,而是每次打印0。 有人请协助我解决此问题。 谢谢

import time
import sys
n=0
while n!=1:
    error=True
    error1=True
    print"\n"
    print"                  *************************************"
    print"                  *!Welcome to RBDC BinAdd Calculator!*"
    print"                  *+++++++++++++1-Bin_Add+++++++++++++*"
    print"                  *+++++++++++++++2-Exit++++++++++++++*"
    print"                  *************************************"
    print"                              Build 0.0.9 ALPHA\n"

    while error:
        try:
            choice=input("Select a Option: ")
            print "\n"
            if choice >=3:
                print"Please enter a number between 1-2."
            error=False
        except NameError:
            print"Not a number. Please try again."
            time.sleep(1)
        except SyntaxError:
            print"Not a number. Please try again."
            time.sleep(1)

    if choice ==1:
        print"***You have selected Bin_Add.***\n"
        while error1:
            try:
                bin2dec = raw_input("Please enter 1st binary number: ")
                bin2dec2 = raw_input("Please enter 2nd 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)

        time.sleep(1)
        if False in [i == '0' or i == '1' for i in bin2dec]: # check if the number is in Binary for bin2dec
            print "\n1st input is not Binary number. Please try again."
            time.sleep(1)
        else:
            print "\n1st input is a Binary number"

        time.sleep(1)
        if False in [i == '0' or i == '1' for i in bin2dec]: # check if the number is in Binary for bin2dec2
            print "\n2nd input is not Binary number. Please try again."
            time.sleep(1)
        else:
            print "2nd input is a Binary number"

            decnumstored=0
            decnum = 0
            for i in bin2dec:
                decnum = decnum * 2 + int(i)
                time.sleep(0.25)
                decnum = decnumstored+int(decnum)  #stores result of bin2dec2 in the decnumstored1 var.

            decnumstored1=0
            decnum1 = 0
            for i in bin2dec2:
                decnum = decnum1 * 2 + int(i)
                time.sleep(0.25)
                decnum = decnumstored1+int(decnum1)  #stores result of bin2dec2 in the decnumstored1 var.

            a=decnumstored+decnumstored1  ##adds the 2 variables and converts to binary
            b = ''            
            b = str(a % 2) + b
            a >>= 1
            print "\n",str(b),"<<This is your answer!"  ##          



    if choice==2:
        endex=raw_input("\nDo you want to Exit? \nInput Y or N: ")
        if endex == "N":
            print "You have chosen to run this programme again...\n"
        elif endex == "n":
            print "You have chosen to run this programme again...\n"
        else:
            print "\nThank you for using RBDC Bin2Dec Converter \nGoodbye"
            time.sleep(2)
            break

此行和另一个类似的错误原因:

decnum = decnumstored+int(decnum)  #stores result of bin2dec2 in the decnumstored1 var.

您未按照注释中的decnumstored1将结果存储在decnumstored1中。

好消息是您的评论使其他人很容易找到该错误。

有很多代码,我不认为是否有人愿意为您调试它,所以不是。 但我可以建议您使用一种更简单的方法来查找二进制数之和:

def sum_binary_numbers(l):
    return bin(sum(map(lambda x: int(x, 2), l)))

并这样调用:

try:
    print sum_binary_numbers(map(raw_input, ["First: ", "Second: "]))
except ValueError:
    print "Incorrect numbers. Try again"

演示:

In [15]: try:
   ....:     print sum_binary_numbers(map(raw_input, ["First: ", "Second: "]))
   ....: except ValueError:
   ....:     print "Incorrect numbers. Try again"
   ....:     
First: 10101
Second: 1010
0b11111

In [16]: try:
   ....:     print sum_binary_numbers(map(raw_input, ["First: ", "Second: "]))
   ....: except ValueError:
   ....:     print "Incorrect numbers. Try again"
   ....:     
First: 42
Second: Some words
Incorrect numbers. Try again

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM