Python(基数変換n進数)
def valid(base,src):
"""<検査関数>入力値が正しいかどうか判定する関数"""
if len(src) == 0 or base==1 or base >11:
return False
# strで判定する場合、2桁以上のbaseが渡されると判定できない
for i in src:
#if not("0" <= i < str(base)):
# 10進数間での対応なら以下の方法で可能だが、1進数には未対応
if not("0" <= i <= str(base-1)):
return False
return True
def input_num():
tmp = input("基数を入力してください:")
if tmp.isdigit() and 0<=int(tmp)<=10:
return int(tmp)
def test_exec():
# 入力エラーをなくす
#base = int(input("基数を入力してください:"))
#base = input("基数を入力してください:")
#if not (base.isdigit() and 0<=int(base)<=9):
# return False
#base = int(base)
while True:
base = input_num()
if base:
break
src = input(f"{base} 進数を入力してください:")
if src.lower() == "exit":
return False
elif not valid(base,src):
print(f"不正な{base}進数:",src)
return False
print("求める10進数は:",convert(src,base=base),"\n")
return True
def convert(src,*,base=2):
n_result=0
for i,x in enumerate(reversed(src)):
n_result += int(x)*base**i
print(f"Debug i:{i} x:{x} {base}**{i}={base**i} result:{n_result}")
return n_result
def test():
while test_exec():
pass
print("end")
#実行部分
test()
2~10までの進数を10進数に変換するプログラムです。
基数入力は正しい値が入力されるまで再入力可能ですが、その基数に対して間違った変換したい数値を入力するとプログラムが終了します。
また、exitでプログラムが終了するプログラムがしてありますが、入力受付が基数入力後でないと判定してもらえず、挙動としてはほぼ間違った数値を入力してしまった場合と同様(汗)
まだまだ、改良の余地がありそうですね。