LoginSignup
0
0

[python] 0〜任意の数で、0戻りさせる with 基数変換

Last updated at Posted at 2023-11-12

ちょっといい感じの書き方ないんかな?ってなって作ってみました。

その名も、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カウンター
  • 随時募集中

以下、参考させて頂きました。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0