金色のカラーコードは「#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
組み込み関数のみで実現可
ユーザー定義の関数を作る必要はありません。一般的な¥付の数値での計算などに応用することができます。