基数変換
"AF"という文字列が与えられ、もう一つ引数として、
"16"が与えられたとすると、これを10進数に変換すると"175"ですよね。
10*16^1+15*16^0 = 175
こういった感じでランダムな基数(先ほどの場合は基数は"16")が与えられ、
その基数で表されている文字列をその基数に則って10進数に変換するプログラムの作成です。
イメージとしては、上の式で表されていることをそのまま書けばいいので、
こんな感じにかけました。過去に用いた「enumerate」、「all( )」がいきました。
(参照:enumerate→転倒数を数える。[Python 3.0] - aisaka.com
all →パングラムであるかどうかを確かめる。[Python 3.0] - aisaka.com)
def checkio(str_number, radix):
digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[:radix]
if all( check in digits for check in str_number) == True:
else:
return -1
要素番号ごとループに回して....とそうしたら文字列を逆順にしないとここで掛け合わされている"n"がかみ合いませんよね。
なので、今回初登場の
"str_number[::-1]"
です。 [ : : -1]の意味を説明します。
文字列の逆順って結構面倒なんですが、これだと一発。
スライス操作の拡張で、元来、[begin:end:step]と指定することになっているので
ここをbeginとendを無視して、stepを-1刻みにすれば、
-1というのは配列の一番後ろを表し、最後列の一個前は-2というようになっているため
うまい具合に逆順にできるというわけです。
下記URLに他のExtended-slicesが載っているので参考にしてみてください。
(参照:https://docs.python.org/2/whatsnew/2.3.html#extended-slices)