簡體   English   中英

添加二進制數Python

[英]Adding binary numbers Python

我正在嘗試使用簡單的代碼在python中添加兩個二進制數。 有人可以告訴我為什么這不起作用? 非常感謝! 我嘗試打破代碼,但是當我將其分解時,它們都會分開工作。 但當然,當我把它放在一起時,它不起作用。

我是Python的初學者,所以解釋肯定會受到贊賞。 謝謝您的幫助!

#Enter numbers and define variables
number1=input("Enter 1st Binary Number:")
number2=input("Enter 2nd Binary Number:")
x1 = number1[0]
x2 = number1[1]
y1 = number2[0]
y2 = number2[1]

#Convert to integers from strings
int(x1)
int(x2)
int(y1)
int(y2)



#Digit 1 of answer and digit to be carried
if x1+y1==0:
  a1 = 0
  c1 = 0
if x1+y1==1:
  a1 = 1
  c1 = 0
if x1+y1==2:
  a1 = 0
  c1 = 1




#Digit 2 of answer and digit to be carried
if x2+y2+c1==0:
  a2=0
  c2=0
if x2+y2+c1==1:
  a2=1
  c2=0
if x2+y2+c1==2:
  a2=0
  c2=1
if x2+y2+c1==3:
  a2=1
  c2=1

#Digit 3 of answer
c2=a3

if a3==1:
  print ("a3" + "a2" + "a1")

if a3==0:
  print ("a2" + "a1")

它給出的錯誤是沒有定義c1和a1。

再次感謝!

更改

#Convert to integers from strings
int(x1)
int(x2)
int(y1)
int(y2)

#Convert to integers from strings
x1 = int(x1)
x2 = int(x2)
y1 = int(y1)
y2 = int(y2)

你還沒有定義a3

#Digit 3 of answer
c2=a3

如果要打印變量的值(可能必須使用str()將它們轉換為字符串),請使用

if a3==1:
  print (a3 + " " + a2 + " " + a3)

if a3==0:
  print (a2 + " " + a1)

如果要添加變量,請使用:

if a3==1:
  print (a3 + a2 + a1)

if a3==0:
  print (a2 + a1)

代替

if a3==1:
  print ("a3" + "a2" + "a1")

if a3==0:
  print ("a2" + "a1")

python中有幾種方法可以添加兩個二進制數並打印它們。 以下是方法。 (但我會在下面解釋你的問題)

方法1:

number1=input("Enter 1st Binary Number:")
number2=input("Enter 2nd Binary Number:")

num1 =int(number1,2)  //Convert string to binary number **NOTE:** int('string',base) is the format
num2 = int(number2,2)

bin_num = bin(num1+num2)
print(bin_num)
print(str(bin_num)[2:] #just to remove the '0b'

輸出:

Enter 1st Binary Number:10
Enter 2nd Binary Number:01
0b11
11

方法2:

number1=input("Enter 1st Binary Number:")
number2=input("Enter 2nd Binary Number:")

num1 =int(number1,2)
num2 = int(number2,2)
print("{0:b}".format(num1+num2))

輸出:

Enter 1st Binary Number:10
Enter 2nd Binary Number:01
0b11
11

你的問題:

您可以在程序的頂部聲明它們,然后使用它們。

此外 ,你還有一件事錯了,

int(x1)
int(x2)
int(y1)
int(y2)

這四條線什么都不做。 您沒有更改x1,x2,y1,y2中的值,只是調用int()它們而不修改它們。 這樣做,

x1=int(x1)
x2=int(x2)
x3=int(y1)
x4=int(y2)

完整代碼:

a1=c1=a2=c2=a3=c3=0 #Declare and define them all `0`s at top
#Enter numbers and define variables
number1=input("Enter 1st Binary Number:")
number2=input("Enter 2nd Binary Number:")
x1 = number1[0]
x2 = number1[1]
y1 = number2[0]
y2 = number2[1]

#Convert to integers from strings
x1=int(x1)
x2=int(x2)
x3=int(y1)
x4=int(y2)



#Digit 1 of answer and digit to be carried
if x1+y1==0:
  a1 = 0
  c1 = 0
if x1+y1==1:
  a1 = 1
  c1 = 0
if x1+y1==2:
  a1 = 0
  c1 = 1




#Digit 2 of answer and digit to be carried

if x2+y2+c1==0:
  a2=0
  c2=0
if x2+y2+c1==1:
  a2=1
  c2=0
if x2+y2+c1==2:
  a2=0
  c2=1
if x2+y2+c1==3:
  a2=1
  c2=1

#Digit 3 of answer
c2=a3


if a3==1:
  print (a3 , a2, a1,sep='')

if a3==0:
  print (a2 , a1,sep='')

最后,最后一行不會打印a1a2的值,而只會打印字符串。 所以刪除 雙引號

注意:我給了一個額外的參數sep=''沒有它你的輸出之間會有空格。 喜歡,

1 1

sep=''你會得到

11

我將建議添加兩個二進制數的簡單代碼。

number1 = str(input("Enter 1st Binary Number"))
number2 = str(input("Enter 2nd Binary Number"))
intSum = int(number1, 2) + int(number2, 2)  #int() takes first argument as string
result = bin(intSum)[2:]  #remove 0b
print result

產量

Enter 1st Binary Number1111
Enter 2nd Binary Number1010
11001

其他答案都是正確的。 但是很少有其他觀點。

1.您可以將轉換結合到整數和分配一步。 喜歡:

x1 = int(number1[0])
x2 = int(number1[1])
y1 = int(number2[0])
y2 = int(number2[1])

2.使用相同的變量集進行多個條件檢查時,如果它沒有損害你的邏輯,那么使用elif是個好主意。 在你的情況下:

#Digit 1 of answer and digit to be carried
if x1+y1==0:
  a1 = 0
  c1 = 0
elif x1+y1==1:
  a1 = 1
  c1 = 0
elif x1+y1==2:
  a1 = 0
  c1 = 1

因為, x1+y1==0x1+y1==1x1+y1==2不會同時為真。 類似地,它也可以應用於答案的數字2。

3.預分配可以減少行數。

a1 = c1 = 0

然后你的數字1塊看起來像:

#Digit 1 of answer and digit to be carried
if x1+y1==1:
  a1 = 1
elif x1+y1==2:
  c1 = 1

在這里,我刪除了對x1+y1==0的檢查,因為默認情況下a1c10 而對於其他無效案例,您必須制作另一個條件語句。 數字2塊也可以類似地修改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM