「Python」カテゴリーアーカイブ

【数学】【PYTHON】10進数に変換する

これも

>>> int('0b11010', 2)
26
>>> int('0x1A', 16)
26

のようにint関数で計算してくれるのですが、

これもコードで書きます。

import sys
import re

args = sys.argv

def aby2dec(target, m):
    n = len(target) - 1
    sum = 0

    for i in range(len(target)):
        alpha_search_result = re.search('[A-F]', target[i])
        if alpha_search_result:
            num = ord(alpha_search_result.group()) - 55
        else:
            num = int(target[i])
        sum += (m ** n) * num
        n -= 1
    return sum

print(aby2dec(args[1], int(args[2])))

サンプルコードでは[A-F]をif文でベタ書きしていたのですが、

ここでは正規表現とASCIIコードで取得するようにしました。

演算子**で階乗計算できるんですね。

【数学】【PYTHON】10進数を16進数に変換する

こちらも同じようにhex(26)を実行すれば’0x1a’を出力されますが、

これをPythonのコードで書きます。

import sys

args = sys.argv

def dec2hex(target):
    division = target
    hex = []

    while division != 0:
        remainder_of = division % 16
        division = division // 16
        if remainder_of >= 10:
            hex.append(chr(55 + remainder_of))
        else:
            hex.append(remainder_of)

    hex.reverse()
    return hex

print(dec2hex(int(args[1])))
taki@DESKTOP-4VF3GEO:~/python$ python dec2hex.py 26
[1, 'A']

こちらもサンプルでは[A-F]を愚直にif文で書いていますが、

AはASCIIコードで65(0x41)なので、55に余りを足してchrで変換することで[A-F]に変換しています。

【数学】【Python】10進数を2進数に変換する

Pythonだったら

taki@DESKTOP-4VF3GEO:~/python$ python
Python 2.7.18 (default, Mar  8 2021, 13:02:45) 
[GCC 9.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> bin(26)
'0b11010'
>>> 

という感じで変換出来るんですが、あえてロジックで組んでみます。

import sys

args = sys.argv

print(args)
def dec2bin(target):
    division = target
    amari = []

    while division != 0:
        amari.append(division % 2)
        division = division // 2
    
    amari.reverse()
    return amari

print(dec2bin(int(args[1])))

taki@DESKTOP-4VF3GEO:~/python$ python dec2bin.py 26
['dec2bin.py', '26']
[1, 1, 0, 1, 0]

引数をdivisionに置き換えているのは、引数に計算結果を代入するのはよろしくないという考えの元、サンプルコードを書き換えています。