Edited at

アルファベット進数

「アルファベット進数」という訳の分からない造語を作ってしまった( '-' )


プログラム

"""

処理内容(例:「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_columnsheet.max_rowを使えば何とかできそうな気もしたけど、列名を取得する方法が見当たらない。。。

「だったら作ってしまえ!」っていう( '-' )←


「26進数になってるな...どうやったら進数ってプログラム組めるだろう」ってところから組んでみて、法則見つけるまで少し時間かかったけど、何とか自力でやったった( '-' )!!!

もっと良い方法あったら教えて下さい。