Dodawanie liczb binarnych

0

Witam. Mam problem z napisaniem kodu na dodawanie liczb binarnych. Mianowicie chodzi o to, że program daje błąd w momencie gdy wpiszemy liczby o różnych cyfrach.
Oto mój kod:

b1=str(input())
b2=str(input())
b3=""
dalej=0
for i in range(len(b1)-1,-1,-1):
    suma=int(b1[i])+int(b2[i])+dalej
    if suma > 1: 
        suma-=2
        dalej=1
    else:
        dalej=0
    b3=str(suma)+b3
if dalej==1:
    b3=str(dalej)+b3
print b3
0

Zauważ, że w przypadku dodawania dwóch liczb o różnych długościach musisz je do siebie wyrównać zerami wiodącymi, np.: 1000 + 100 = 1000 + 0100.

0

Na temat odpowiadaj w postach ;-)

Pokaż jak próbowałeś wyrównać dwie liczby o różnych długościach zerami wiodącymi.

0
if (len(b1))<(len(b2))
  ((len(b1))=(len(b1)+((len(b2))-(len(b1)))
0

Dlaczego myślisz, że ten kod będzie wypełniał cokolwiek zerami wiodącymi? :-)
Btw, umieszczaj kod w odpowiednich znacznikach.

0

Znaczy wydaje mi sie, że będzie on dopełniał tą liczbę tak, aby ich długości cyfr były równe, ale żeby dopełniał zerami to tego nie mam pojęcia jak zrobić

0

Wydaje mi się, że przeceniasz zdolności Pytona do czytania w myślach, bo ten kod niestety nie będzie robił nic ;-)

Co powiesz na coś takiego:

while len(liczbaA) < len(liczbaB):
  liczbaA = "0" + liczbaA
0

Nie mogę zastosować while, ponieważ nie mieliśmy jeszcze tego na lekcji.

0

Cóż... w takim razie pomyśl jak przerobić to na for.

0

A jeżeli bym już używal tego while to, w którym miejscu mam to wstawić, bo jak sobie teraz to wstawiłem to mi nie działa
*jestem początkujący dlatego z góry przepraszam jeżeli te pytania są głupie i bezsensowne

0

Dodawanie można podzielić na dwa etapy:

  • wyrównanie liczb do siebie,
  • wykonywanie dodawania.

Jeden z tych etapów masz już zakodowany.

0

Zakodowane mam wykonywanie dodawania, ale z tym wyrównaniem liczb mam problem

1
liczbaA = str(input())
liczbaB = str(input())

while len(liczbaA) < len(liczbaB):
  liczbaA = "0" + liczbaA

while len(liczbaB) < len(liczbaA):
  liczbaB = "0" + liczbaB

wynik = ""
przeniesienie = 0

for i in range(len(liczbaA)-1, -1, -1):
  # ...
0

dziękuje bardzo, tylko teraz muszę przerobić to na for ale to już spróbuje samemu

0

Jest w ogóle to możliwe żeby to przenieść na for?

1

A ja bym zera uzupełnił pythonowo wbudowaną metodą dla str, tak:

if len(b1) > len(b2):
    b1 = b2.zfill(len(b1)
elif len(b1) < len(b2):
    b2 = b1.zfill(len(b2)

lub od razu tak:

b1.zfill(len(b2))
b2.zfill(len(b1))

@Edit:

>>> b1 = "100"
>>> b2 = "1000"
>>> b1.zfill(len(b2))
'0100'
>>> b2.zfill(len(b1))
'1000'
>>> b1 #Dopóki nie przypiszemy, jest niezmieniony
'100'
>>> b2 = b2.zfill(len(b1))
'1000'
>>> b1 = b1.zfill(len(b2))
'0100'
>>> b1
'0100'
>>> b2
'1000'

Chociaż według mnie nie po to są wbudowane metody do binarki w pythonie, żeby ich nie wykorzystywać i całość można rozwiązać w ten sposób:

b1=int(input(), 2)
b2=int(input(), 2)
b3=bin(b1+b2)
print b3
0

Nie mam pojęcia co robi .zfill

0

Wersja z for:

for lead_zeros in range(abs(len(b1)-len(b2))): #Pętla wykona się tyle razy ile wynosić będzie wartość bezwzględna z odejmowania
    if len(b1) > len(b2):
        b2 = "0"+b2
    else: #W takim forze, jeden z warunków < lub > musi wystąpić, więc można dać else, pętla nie wykona się więcej razy niż potrzeba.
        b1 = "0"+b1
0

A ja zrobilem tak:


b1=str(input())
b2=str(input())
b3=""
dalej=0

lista=b1+b2
for g in lista:
    if int(len(b1))<int(len(b2)):
        b1="0"+b1
for g in lista:
    if int(len(b2))<int(len(b1)):
        b2="0"+b1
    
for i in range(len(b1)-1,-1,-1):
    suma=int(b1[i])+int(b2[i])+dalej
    if suma > 1: 
        suma-=2
        dalej=1
    else:
        dalej=0
    b3=str(suma)+b3
if dalej==1:
    b3=str(dalej)+b3
print b3
0
Python 2.7.12 (default, Dec  4 2017, 14:50:18) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> int("01001", 2)
9
>>> bin(9)
'0b1001'

W pythonie2 też działa ta metoda :).
Musiałeś jakoś źle wpisać.

0

Kolejne zagadnienie, co zrobić kiedy wpiszemy np liczbę 010 i 10, bo wtedy nie dziala program :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1