ちょっといい感じの書き方ないんかな?ってなって作ってみました。
その名も、roll_to_zero
関数だ!!
なんと簡単な、、、
こんな記事必要なのか。。。。
そういう人もいるかもしれない。
かく言う私もそうだ。
まぁ、意外と使うタイミングあるけど
範囲内で頭打ちさせたり底打ちさせるって関数は
よく自作される方もいるようなんだけど
自分の需要は任意最大値で丸めて0へ戻ってほしいんだよね。
時計みたいに。
そんで調べてみても
ひたすらif
文でこねくり回すやり方は見つけたんだけど
なんか違う感、半端ないよね?笑
そこで思いついたのがこちらの関数。
とはいえ基数変換必要なかったのは後の話、、、
def radix(n, base):
beginning_sign = '' if 0 <= n else '-'
buf = ''
_n = abs(n)
_b = base
if _n != 0:
while _n > 0:
buf = str(_n%_b) + buf
_n //= _b
else:
buf = '0'
return beginning_sign + buf
# ご指摘いただきまして、上のradix不要!!
# 以下で完結です。
def roll_to_zero(num, add=0, base=2):
# The argument "base" is
# a number that is replaced
# with 0 when reached.
# When "base=2",
# the range of the ones digit
# is "0 to 1".
numadd = abs(num + add)
# numadd_right = int(radix(numadd, base=base)[-1])
numadd_right = numadd % base
return numadd_right
radix
radix
にて基数変換を行い、10進数→n進数へ変換します。
n進数の一ノ位は、0〜(n-1)となります。
2進数であれば 0〜1, 3進数であれば 0〜2のように。
もともとは0,1で0戻りしてほしいだけだったので
組込みのbin()
でもよかったですが、
紹介するなら汎用性を、と思い付属させてみました。
2023/11/13 追記
ただコメント頂きまして、よくよく見たらそんなことする必要ありませんでしたね笑
余り分れば、この課題にはなんの弊害も無いという!!!
web漁って切り貼りも大概にせねば、、、
roll_to_zero
指定絶対値を取って余りを返すだけ、、、
いや、記事にする必要ほんと無かったな。
想定される用途について
まぁ、思いつくところでは
- 99までカウントして00に戻るけど裏では100以上もカウントしてます99カウンター
- 時刻指定をプラスマイナスボタンでポチポチしますよ23カウンターまたは59カウンター
- 今日からn日たったら何曜日なんだろう。7カウンター
- 随時募集中
以下、参考させて頂きました。