LoginSignup
0
0

More than 5 years have passed since last update.

アルファベット進数

Last updated at Posted at 2018-11-22

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

プログラム

"""
処理内容(例:「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進数になってるな...どうやったら進数ってプログラム組めるだろう」ってところから組んでみて、法則見つけるまで少し時間かかったけど、何とか自力でやったった( '-' )!!!

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

0
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0