大家好,我想在Python中添加两个二进制数字时遇到麻烦,我的意思是我可以以字符串形式输入字符链,但是我不知道如何在链中选择特定值。这是我的代码:
chaina = input('Enter your first binary number')
chainb = input('Enter your second binary number')
liste = str()
r = 0
for i in range [-1,chaina]:
t = 0
t = chaina() + chainb() + r
if t == 2 :
r = 1
liste = str(t) + liste
elif t == 0 or t == 1:
r = 0
liste = str(t) + liste
答案 0 :(得分:0)
为什么不简单地将它们转换为十进制并像对待小数一样添加它们:
y = '0b101010'
z = '0b101010'
print(int(y,2) + int(z,2))
print(bin((int(y,2) + int(z,2))))
答案 1 :(得分:0)
要添加两个二进制数字chaina
和chainb
:
bin(eval('0b{} + 0b{}'.format(chaina, chainb)))
或者,如果您想要不带前导'0b'
的二进制数:
format(eval('0b{} + 0b{}'.format(chaina, chainb)), 'b')
假设示例为chaina = '1010'
和chainb = '1111'
。然后:
>>> '0b{} + 0b{}'.format(chaina, chainb)
'0b1010 + 0b1111'
通过在此字符串上应用eval()
,我们得到的结果与直接在Python控制台中键入表达式0b1010 + 0b1111
一样。
>>> 0b1010 + 0b1111
25
>>> eval('0b1010 + 0b1111')
25
最后,bin()
生成以二进制形式表示作为参数传递给它的数字:
>>> bin(25)
'0b11001'
通过使用format()
参数调用'b'
可以实现相同的目的:
>>> format(25, 'b')
'11001'
所有内容放在一起,我们得到上面显示的表达式。
答案 2 :(得分:0)
假设您想手动进行二进制和 ,则必须:
reversed
会有所帮助)reversed
)代码可能是(假设您可以确定chaina
和chainb
仅包含0
和1
字符,在这里无需对其进行测试):>
def binsum(chaina, chainb):
def next0(it):
"""Retrieve next digit from a binary representation, 0 when exhausted"""
try:
return int(next(it))
except StopIteration:
return 0
a = reversed(chaina) # reverse chains to start with lowest order bit
b = reversed(chainb)
r = 0
result = [] # future result
for i in range(n):
t = next0(a) + next0(b) + r # add with carry
if t > 1:
t -= 2
r = 1
else:
r = 0
result.append('1' if t else '0')
if r != 0: # do not forget last carry
result.append('1')
return ''.join(result)
答案 3 :(得分:0)
一些建议
标准化位串的长度
l0, l1 = map(len, (str0, str1))
if l0 < l1:
str0 = "0"*(l1-l0) + str0
elif l1 < l0:
str1 = "0"*(l0-l1) + str1
对反向字符串元素进行循环,并自底向上构造二进制字符串
remainder = 0
result = ""
for bit_0, bit1 in zip(reversed(str0), reversed(str1)):
bit_0, bit_1 = map(int, (bit_0, bit_1))
new_bit, remainder = f(bit_0, bit_1, remainder)
result = str(new_bit) + result
if remainder != 0
...
编写f(bit_0, bit_1, remainder)
并在循环结束时处理remainder
不为null时该怎么做。