Python プログラミング

 金色のカラーコードは「#e6b422」と16進数に#をつけて表記されます。この表記法でもCSSなどでは、そのまま使えます。

 Pythonでは、2進数や8進数、16進数の取り扱いはどうなっているのでしょう。カラーコード「#e6b422」をそのまま使えるのでしょうか?使えないとすれば、どうすればよいのでしょうか?

2~16進数を10進数へ変換する

Pythonは「16進数カラーコード」を扱えない

そのままでは代入できない

 16進数カラーコード #abc を代入できるか試してみましょう。

python

>>> number = #abc
  File "<stdin>", line 1
    number = #abc
             ^^^^
SyntaxError: invalid syntax

 文法エラーとなります。’#’が付くと数と認識しないようです。

python

>>> number = "#abc"
>>> number
'#abc'
>>> type(number)
<class 'str'>

 文字列としてなら代入できます。しかし、これでは数値としての処理はできません。

Pythonの数表記法を使う

 16進数は、先頭に0(ゼロ)xをつけます。

python

>>> number_hexadecimal = 0xabc
>>> number_hexadecimal
2748

使える数字は0からfまでです。それ以外の文字はエラーとなります。

 

 2進数は先頭に0(ゼロ)bをつけます。

python

>>> number_binary = 0b111110
>>> number_binary
62

使える数字は0と1です。

 

 8進数は先頭に0(ゼロ)oをつけます。

python

>>> number_octal = 0o777
>>> number_octal
511

使える数字は0から7までです。

 

他の表記法 &o, &h をつけても8進数、16進数にはならず、サポート外です。

関数で数値に変換する

int() 関数を使ってみる

 引数が一つの場合は、数値を整数(int)型に変換します。

python

>>> int(6.28)
6
>>> int(-5.25)
-5

 数値の意味を持たない文字列を引数に渡すと、エラー(ValueError)になります。

python

>>> int("abc")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'abc'

 

 書式::int(数値化できる文字列,base=基数)

 

 Python の int()関数は、引数を2つ指定することができます。

 基数は base=基数 で代入し、base=2であれば、2進数を整数に、16であれば、16進数を整数に直します。

python

>>> int("f",base=16)
15

"0b","0o"や"0x"が付いた文字列でも、base=2、base=8、base=16を指定しなければなりません。

python

>>> int("0b111")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '0b111'

python

>>> int("0o70",base=8)
56

関数でも、"&o","&h"は受け付けません。"#"も当然サポート外です。これらは文字とみなされています。

python

>>> int("&hff",base=16)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 16: '&hff'

python

>>> int("#abc", base=16)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 16: '#abc'

 余分な文字を削除する必要があります。

文字列メソッドとの併用で解決

  lstripメソッド

 

 書式::文字列.lstrip("文字[複数指定可]")

 

 文字列の左端から指定した文字を削除します。

python

>>> "#abc".lstrip("#")
'abc'

 姉妹メソッドには、右端から文字削除を行う rstrip、両端からの strip があります。

python

>>> int("#abc".lstrip("#"), base=16)
2748

 replace メソッドで取り除く(空に置き換える)方法もあります。

python

>>> int("#abc".replace("#", ""), base=16)
2748

組み込み関数のみで実現可

 ユーザー定義の関数を作る必要はありません。一般的な¥付の数値での計算などに応用することができます。