summer_tree_home

Check iOでPython3をマスターするぜっ

Number Base (Library 2.0) - n進数を10進数に変換

どんな問題?

Number Base
http://www.checkio.org/mission/number-radix/

n進数で表された数字を10進数に変換せよ。
2 <= n < 37 とする。
変換できない場合は -1 を返すこと。

例題:

checkio("AF", 16) == 175
checkio("101", 2) == 5
checkio("101", 5) == 26
checkio("Z", 36) == 35
checkio("AB", 10) == -1

どうやって解く?

前にもあったが、n進数の文字列を数値化するには、int(s, n) とする。
変換できないときは、ValueErrorが出るので、例外処理を加えればよい。

def checkio(str_number, radix):
    try:
        return int(str_number, radix)
    except ValueError:
        return -1

他の人の答え

ここのコメントのやりとりが興味深い。
http://www.checkio.org/mission/number-radix/publications/bryukh/python-3/try-except/

try:
    ~
except:
    return -1

のように、すべての例外を捕捉する書き方をすべきではない、という話。
私も、つい except: と書いてしまうが、想定してない例外も含めてすべてをハンドルしてしまうのはとても危険。気をつけよっと。