Suma liczb binarnych

0

Cześć,
Zaczynam dopiero naukę pythona i dostaliśmy na studiach zadanie z sumowania liczb binarny (treść zadania poniżej). Nie bardzo wiem gdzie w moim kodzie jest błąd :( Z góry bardzo dziękuję za każdą pomoc :)

Dane są dwie liczby zapisane w postaci binarnej. Oblicz ich sumę, a wynik podaj również w postaci binarnej.
Wejście
W pierwszej linii wejścia znajduje się jedna liczba całkowita d (1 <= d <= 100), która oznacza liczbę zestawów danych.
Każdy zestaw składa się z czterech linii. W pierwszej z nich znajduje się liczba bitów n (1<=n<=10000), na których zapisana jest pierwsza liczba.
Druga linia zawiera n oddzielonych spacjami cyfr: zer lub jedynek, tworzących reprezentację binarną pierwszej liczby.
W trzeciej linii znajduje się liczba bitów m (1<=m<=10000), na których zapisana jest druga liczba.
Czwarta linia zawiera m oddzielonych spacjami cyfr: zer lub jedynek, które tworzą reprezentację binarną drugiej liczby.
W zapisie liczb nie ma zer wiodących, tzn. pierwszy bit każdej liczby jest równy 1, chyba że cała liczba jest równa 0 (jeden bit równy 0).

Wyjście
Na wyjściu należy dla każdego zestawu danych wypisać ciąg zer i jedynek (bez spacji), będący zapisem binarnym sumy liczb podanych na wejściu.

Przykład
Wejście:
2
4
1 0 0 1
2
1 1
4
1 1 1 1
6
1 1 1 1 1 1

Wyjście:
1100
1001110

Kod:

ilosc = int(input())
dlugosc1 = int(input())
tab1 = [int(x) for x in input().split()]
dlugosc2 = int(input())
tab2 = [int(x) for x in input().split()]
wynik = []
for j in range (ilosc):
    if dlugosc2 > dlugosc1:
        for i in range (dlugosc2, 0):
            wynik[i] = (tab1[i] + tab2[i] + reszta)%2,
            if (tab1[i] + tab2[i] + reszta)>= 2:
                reszta = 1
            else:
                reszta = 0
    else:
        for i in range (dlugosc1, 0):
            wynik[i] = (tab1[i] + tab2[i] + reszta)%2,
            if (tab1[i] + tab2[i] + reszta)>= 2:
                reszta = 1
            else:
                reszta = 0
print(*wynik)
0

Zacząłbym od tego ze print(*wynik) wypisze ci np. 1 0 1 0 zamiast 1010. Zrób tam jakieś print(''.join(map(str,wynik)))

0

range (dlugosc2, 0) dla nieujemnych dlugosc2, będzie pustym zakresem (tzn nie idzie się w dół). Jak chcesz osiągnąć zejście w dół, to możesz podać trzeci argument, tzn range(dlugosc2, 0, -1). Zauważ że wtedy taki zakres zawiera dlugosc2, zawiera 1, ale nie zawiera zera.

0

@enedil: A jest jakiś inny sposób żeby osiągnąć sumowanie od tyłu? Próbowałam z dodaniem trzeciego argumentu "-1", ale wyrzuca mi błąd: "list index out of range".
Trochę też nie rozumiem jak zadziała wypisanie wyników w przypadku wprowadzenia kilku zestawów liczb - jak powinnam wypisać wtedy wynik poszczególnych sum w kolejnych liniach?

0

Wczytując się w treść zadania nie ma nic o tym, że samo sumowanie ma odbyć się binarnie. Zczytałbym liczbę, przekonwertowałbym na int, zsumował i zwrócił binarną na wyjściu ;)

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