求-Python-數位電路模擬

求下列題目程式碼

數位電路模擬
數位IC輸入m 是二進位 8 位元,輸出是二進位 4 位元。
輸入範圍從 00000000 到 11111111 (十進位 0-255)。
輸出範圍從 0000 到 1111 (十進位 0-15)

數位IC內有一個回饋電路接收輸入m,視為一個函數C(m),其回饋方式如下:
1 若m為偶數(十進位),則C(m) = C(m/2)
2 若m為奇數(十進位),則C(m) = C((m+1)/2)
3 若m = 1,則回饋電路結束

數位IC內有一個紀錄器,會記錄回饋電路的回饋次數。
R(m) = [C(m)的回饋次數],例如:R(10) = 4。
數位IC的輸出為紀錄器所記錄之回饋電路的回饋次數。
數位IC範例說明:
1 00001010 輸入二進位8位元m (十進位為10)
2 進入回饋電路C(10)
3 10為偶數,因此第一輪回饋為C(10) = C(5)
4 5為奇數,因此第二輪回饋為C(5) = C(3)
5 3為奇數,因此第二輪回饋為C(3) = C(2)
6 2為奇數,因此第二輪回饋為C(2) = C(1)
7 m=1,因此回饋電路結束
8. 總計回饋4次,因此輸出0100(十進位為4)

題目要求:
1 設計數位IC的function
2 主程式中可接受多組輸入,並經過數位IC後,一次輸出所有數位IC的輸出結果

輸入說明:
可接受多組二進位8位元的輸入m,每組輸入以隔行區隔,直到輸入-1後停止輸入。

輸出說明:
輸出每組二進位8位元的輸入m進入數位IC後的輸出結果,每組輸出以隔行區隔。
Note:切勿輸入一組m後就印出數位IC結果,請於輸入-1後才一次印出所有結果

輸入範例:
00000000
11111111
00000001
10000000
00111111
-1

輸出範例:
0000
1000
0000
0111
0110

>>> def ic(*args):
    for m in args:
        m = int(m, base=2)
        r = 0
        while m > 1:
            m = (m+m%2)//2
            r += 1
        r = bin(r)[2:]
        print(r.zfill(4))

        
>>> def test():
    args = list()
    while True:
        din = input().strip()
        if din == '-1':
            break
        else:
            args.append(din)
    ic(*args)

    
>>> test()
00000000
11111111
00000001
10000000
00111111
-1
0000
1000
0000
0111
0110