bol_in 2021-11-25 12:32 采纳率: 62.5%
浏览 53
已结题

求-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

  • 写回答

1条回答 默认 最新

  • 天元浪子 优质创作者: python技术领域 2021-11-25 13:28
    关注
    >>> 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
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月1日
  • 已采纳回答 12月1日
  • 创建了问题 11月25日