前提・実現したいこと
ユーザーから、受け取った、10進数を2進数にして、2分割します。
それをリストに格納し、それを違う10進数で表したいです。
例えば、424896を2進数変換すると、以下の様になります。
1100111101111000000
この数値を1や0が2連続していたら、
それらをデコードして1、もしくは、0にします(例11→1、00→0)。
それを単一の0(separatorの役割)が来るまで続け、(例000、11011)それにぶつかったら、
再び終わりまで、デコードします。
上の2真数をこの方法で格納すると、 [1011, 11000]となります。
ここから、10進数に直すと出力は
[11, 24]になります。また、7(111)や24(11000)の様に最後が単一の1や0で終わる数字は
デコードしません。
該当のソースコード
php:filename.php
1def get_list(bit): 2 l= [] 3 bit = str(bit) 4 bit_sliced= bit[::2]#11→1、00→0 5 while bit== bit[len(bit)//2]: # 中心を割り出す 6 l.append(int(bit_sliced)) 7 break 8 l[1]= "," 9 l.append(int(bit_sliced)) 10 return l 11 12 13n = 1100111101111000000 14def get_list(bit): 15 l= [] 16 l2= [] 17 bit = str(bit) 18 bit_s= bit[:len(bit)//2] 19 bit2_s = bit[::2] 20 l.append(int(bit_s)) 21 l2.append(int(bit2_s)) 22 return l2+l 23print(get_list(n)) 24 25out: 26None 27[1011011000, 110011110]
試したこと
まず、Intからstrに型を変えて、色々と試しました。whileの方はNoneになってしまいます。
他にも.split(",")や正規表現のre.matchで000見つけたら、replaceなどをやりましたがダメでした。
まだまだ、python初心者ですが、よろしくお願いします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/29 04:41
2020/10/29 05:51