パーソナルブログメモリ

a = [1, 1]
for _ in "*" * 999: a += [sum(a[-2:])]
print(a)

Python3 10進数をマスクする関数。(おまけ デバック過程)

2020-08-31 | Python

きっかけ

昨日 数値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分

 


最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。