きっかけ
昨日 数値10進数をマスクして取ってこようとして失敗して結局16進にして対応
さっき ふと対応のロジックが浮かんだので作ってみました。
https://colab.research.google.com/drive/1P7px-qQgbJIHV-65m4JyqUEcC-GTckYy?hl=ja
完成形はこちらにも↑
ソース
#10進数をマスクする(正整数のみ)
#maskは文字列として渡され各桁数値以下のものだけにして返します
def mask10(n, mask):
n = str(n)
if len(n) > len(mask):mask = ("0" * 100 + mask)[-len(n):]
if len(n) < len(mask):n = ("0" * 100 + n)[-len(mask):]
masked_num = ""
for n1, m1 in zip(n, mask):
if n1 <= m1:
masked_num += n1
else:
masked_num += "0"
return int(masked_num)
mask1 = "000099990000"
mask2 = "000000009999"
mask3 = "5555555555555555555"
a = 13506355636
b = 8666651002526515
print(mask10(a, mask1))
print(mask10(a, mask3))
print(mask10(b, mask1))
print(mask10(b ,mask3))
以下 おまけ
制作過程
1) イージーミス
Pythonだと: 付け忘れたり、よけいについていたりよくあります。
2) そもそも呼んでない
最後4行テストのはずなのですが...
PEP8に対応して間も追加していってます。
3) なんかあってない
ロジックミスは気づくのに時間が少しかかります。
4) 完成
テストの件数に反比例してバグは存在します。
5) 追加テスト1
1以下の桁だけ取ってみます。
6) 追加テスト2
5以下を取ってみたものが冒頭の画面です。 コーディング終了後、デバック時間は13分