「アルファベット進数」という訳の分からない造語を作ってしまった( '-' )
プログラム
"""
処理内容(例:「731」が渡された時):
- 1. 731 % 26 = 3 ←「C」で確定
- 2. 731 / 26 = 28 ←「26」より大きいので次の処理に使う
- 3. 28 % 26 = 2 ←「B」で確定
- 4. 28 / 26 = 1 ←「26」より小さいので「A」で確定
- 5. 確定したモノを逆順で出力する ←「ABC」
"""
import sys
import math
ALPHABET = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]
result = []
def alphabet_decimal(v):
quotient = math.floor(v / len(ALPHABET))
surplus = v % len(ALPHABET)
quotient -= 1 if surplus == 0 else 0
surplus = len(ALPHABET) if surplus == 0 else surplus
result.append(surplus)
if len(ALPHABET) < quotient:
alphabet_decimal(quotient)
elif len(ALPHABET) < v:
result.append(quotient)
return "".join([ALPHABET[i - 1] for i in reversed(result)])
print(alphabet_decimal(int(sys.argv[1])))
実行結果
$ python editXlsx.py 1
A
$ python editXlsx.py 26
Z
$ python editXlsx.py 27
AA
$ python editXlsx.py 731
ABC
$ python editXlsx.py 3909967
HNKYI
余談
Pythonのモジュール「openpyxl
」を使っていて、「最大行・最大列の範囲を指定する」をしようとした際、方法論が見当たらなかった事がそもそものきっかけ。
# モジュールをインポートして、
# Excelファイルを取得し、
# Sheet1を指定して、
# A1:X3の範囲を取得する。
import openpyxl
book = openpyxl.load_workbook("hoge.xlsx")
sheet = book.get_sheet_by_name('Sheet1')
ranges = sheet["A1:X3"]
上記のコードでは「A1:X3」とハードコーディングで指定しているが、実際のプログラムでこんな事をする訳がない。
sheet.max_column
とsheet.max_row
を使えば何とかできそうな気もしたけど、列名を取得する方法が見当たらない。。。
「だったら作ってしまえ!」っていう( '-' )←
「26進数になってるな...どうやったら進数ってプログラム組めるだろう」ってところから組んでみて、法則見つけるまで少し時間かかったけど、何とか自力でやったった( '-' )!!!
もっと良い方法あったら教えて下さい。