Python 言語の理解 その4

今時の仕様 なの⁈

先日、複数行文字列を使ったコメントの書き方が面白いなと思いましたが、数値や文字列の操作も なかなか興味深いです(笑)。

僕はかなり昔にC言語を覚えただけで、それからは他の言語はほとんど習得してなかったからなんでしょうかねぇ。なんだか便利な感じを受けます。
これは今時の仕様なんでしょうかね。

 

進数表示と進数記述について

・10進数の10を 2進数で表示

 >>> bin(10)
 '0b1010'

・10進数の10を 8進数で表示
 >>> oct(10)
 '0o12'

・10進数の10を 16進数で表示
 >>> hex(10)
 '0xa'

・2進数の1010を 10進数で表示
 >>> 0b1010
 10

・8進数の12を 10進数で表示
 >>> 0o12
 10

・16進数のaを 10進数で表示
 >>> 0xa
 10

これらは、ありがちな事かもしれません。

 

変数の型表示はこのようにするとできるようです。以下整数の例。

>>> age = 10
>>> type (age)
<class 'int'>

 

これはプログラムで判定できるのか?そんな使い道はないか(笑)でも試すと、

>>> type (age) == "<class 'int'>"
False

➡できない!一致しない!

 

>>> type(age) == type(age)
True

➡これはできてる!

>>> type(age) == type(1)
True

➡もしやるなら、こちらかな

 

二重の比較判定が同時にできる⁈

>>> age = 10
>>> 5<age and age<20
True

これをまとめてこんな書き方ができる!これは超便利
>>> 5<age<20
True

 

複数行の文字列の書き方1

>>> poem1="""やま
... かぜ
... れんこん
... """
>>> poem1
'やま\nかぜ\nれんこん\n'

 

複数行の文字列の書き方2

>>> poem2="やま\nかぜ\nれんこん\n"
>>> poem2
'やま\nかぜ\nれんこん\n'

 

文字列の追加

数値の ⁺= はC言語でも使えるけど文字列には無かったような・・・

>>> poem2
'やま\nかぜ\nれんこん\n'
>>> poem2 += "いちご"
>>> poem2
'やま\nかぜ\nれんこん\nいちご'

 

文字列の繰り返しも出来る!

>>> moji = "うまい"
>>> moji * 3
'うまいうまいうまい'

>>> moji3 = "うまい" * 3
>>> moji3
'うまいうまいうまい'

 

文字列の部分取り出し

>>> id1 = "abcdefghijklmn"
>>> id2 = "ABCDEFGHIJKLMN"
>>> id1
'abcdefghijklmn'
>>> id2
'ABCDEFGHIJKLMN'

 

文字列から3文字目の取り出し
>>> id1[2]
'c'
>>> id2[2]
'C'
>>> id1[6]
'g'
>>> id2[6]
'G'

半角も全角も同じ添え字で可能みたいです!これは凄い!

 

7文字目から4文字目まで・・逆方向に指定するとなにも取り出せない

>>> id1[6:3]
''

 

7文字目から10文字目までを取り出す。

>>> id1[6:9]
'ghi'

解りやすいように、+3 と取り出す文字数を指定するとよいかも。

>>> id1[6:6+3]
'ghi'

 

全角でもやり方は同じ。
>>> id2[6:6+3]
'GHI'

 

6文字目から最後まで

>>> id1[5:]
'fghijklmn'

>>> id2[5:]
'FGHIJKLMN'
 

先頭から4文字目まで
>>> id1[:3]
'abc'
>>> id2[:3]
'ABC'

 

先頭から4文字目まで1文字おきに
>>> id1[:3:2]
'ac'
>>> id2[:3:2]
'AC'

 

頭から1文字おきに取り出すならこうなる。
>>> id1[::2]
'acegikm'
>>> id2[::2]
'ACEGIKM'

 

4文字目から1文字おきに取り出す、これは面白いかも。
>>> id1[3::2]
'dfhjln'
>>> id2[3::2]
'DFHJLN'

 

最後から逆順に取り出す。こんなことが出来るの?
>>> id1[::-1]
'nmlkjihgfedcba'
>>> id2[::-1]
'NMLKJIHGFEDCBA'

 

文字列の一部を置換することはできない。これは不便。

>>> id1
'abcdefghijklmn'
>>> id1[3]
'd'

4文字目は d でした。それを s に置換してみる
>>> id1[3]="s"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

 

文字なのでシングルクオートで括ってみたが結果は同じ。
>>> id1[3]='s'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

前半と、後半を取り出して合成するとできなくはないけど。。

>>> id1 = id1[:2] + 's' + id1[4:]

 

そのやり方は以下に書いてありました。

 

# 文字列からリストへ変換し、4文字目を置換
>>> str_list = list(id1)
>>> str_list[3] = 's'

# リストから文字列へ戻す
>>> id1 = "".join(str_list)
>>> print(id1)

'abcsefghijklmn'

 

出来てる!

最後のリストから文字列へ戻すやり方の "". これはどういう意味?

そこを外すとどうなるか

 

>>> id1=join(str_list)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'join' is not defined

 

なぜ怒られているのか理解できない。(笑)
それも外すと。。。

>>> id1=str_list
>>> id1
['a', 'b', 'c', 's', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n']

 

なにがなんだか(;^ω^)