基本型#
Python の数字#
Python には 3 種類の数があります —— 整数、浮動小数点数、複素数
数字の種類 | 例 | 説明 |
---|---|---|
整数 | -2, 12389 999999L, ∞ 0b1110, 0xabf, 0o126 | python2 では整数型と長整数型が区別され、長整数型の整数は無限大になり得ます python3 では統一して整数型と呼ばれます 整数型の 2 進数、16 進数、8 進数の表現方法 |
浮動小数点数 | -3.23, -52.3E-4 | python では科学的記数法で浮動小数点数を表現できます |
複素数 | -5+4j,2.3-4.6j | ここで - 5,4 は実数で、j は虚数です |
-
==int==
python3 では int(超長データを保存可能)だけです
整数の基数表現法 基数 表現方法 例 2 進数 0b で始まり、0 と 1 のみを含み、2 で進む 0b11,0b12(誤った表現) 8 進数 0o で始まり、0-7 を含み、8 で進む 0o11 16 進数 0x で始まり、0-F を含み、16 で進む 0x11 10 進数 数字 0-9 から直接構成され、10 で進む 11 整数の基数操作
基数変換-bin:任意の基数を2進数に変換し、intを受け取り、strを返す 基数変換-oct:任意の基数を8進数に変換し、intを受け取り、strを返す 基数変換-hex:任意の基数を16進数に変換し、intを受け取り、strを返す 基数変換-int:任意の基数を10進数に変換し、int/strを受け取り、intを返す
# 例 >>> bin(10) # 10進数を2進数に変換 '0b1010' >>> bin(0o71) # 8進数を2進数に変換 '0b111001' >>> bin(0x11) # 16進数を2進数に変換 '0b10001' >>> int("10") 10 # strをintに変換 >>> int("0o11",base=8) # 8進数の文字列、指定が必要 9 >>> int(0o11) # 8進数の整数型を直接変換 9
-
==float==
float(浮動小数点型):浮動小数点数は小数点を持つ数字です
float は整数部、小数点、小数部から構成され、科学的記数法で表現することもできます。例えば - 3.23、-52.3E-4、6.23E12
float は不正確です
decimal モジュール
Decimal 型データは正確な小数で、Decimal 整数型または文字列パラメータに渡すことができます
公式ドキュメント
float https://docs.python.org/3/library/functions.html#float
decimal https://docs.python.org/3/library/decimal.html?highlight=decimal
# 例:浮動小数点型データfloatは不正確です
>>> i = 1
>>> i = i - 0.1
>>> i
0.9
>>> i = i - 0.1
>>> i
0.8
>>> i = i - 0.1
>>> i
0.7000000000000001
>>> i = i - 0.1
>>> i
0.6000000000000001
# 例:Decimal型データは正確な小数で、Decimal整数型または文字列パラメータに渡すことができます
>>> from decimal import getcontext, Decimal, Context
>>> mydec = Decimal.from_float(12.222)
>>> mydec
Decimal('12.2219999999999995310417943983338773250579833984375')
>>> mydec = Decimal(0.9)
>>> mydec
Decimal('0.90000000000000002220446049250313080847263336181640625')
>>> mydec = Decimal("3.14")
>>> mydec
Decimal('3.14')
-
==complex==
複素数 complex:複素数は実数と虚数の総称です
数学における表現:複素数の基本形式は a+bi で、ここで a,b は実数で、a は実部、bi は虚部、i は虚数単位です
complex の構成:複素数は実数部分と虚数部分から構成され、一般的な形式は x+yj で、ここで x は複素数の実数部分、y は複素数の虚数部分で、x と y はどちらも実数です
# 例 >>> a = 5 + 4j >>> a.real 5.0 # 浮動小数点型として保存されています >>> a.imag 4.0
Python の文字列#
文字列:文字のシーケンス
表現方法:シングルクォート(');ダブルクォート(“);トリプルクォート(''' または”””);そのまま出力
記号 | 説明 | 例 |
---|---|---|
シングルクォート (') | ダブルクォートを含む文字列を引用可能 | 'say“hello”' |
ダブルクォート (“) | シングルクォートを含む文字列を引用可能 | “What'syourname?” |
トリプルクォート (''' または”””) | 複数行の文字列を引用可能で、トリプルクォート内でシングルクォートとダブルクォートを自由に使用可能 | ''' これは複数行の文字列です シングルクォート ' とダブルクォート” を含むことができます ''' |
特殊マーク (r) | エスケープ文字を無効にし、文字をそのまま出力 | r”hello\tworld!” |
# 例
>>> a = 'test'
>>> b = "test"
>>> a
'test'
>>> b
'test'
>>> a = '''
... t
... e
... s
... t'''
>>> a
'\nt\ne\ns\nt'
>>> print(a)
t
e
s
t
# print(a)は規定の形式で出力します
>>> c = "t1\nt2"
>>> c
't1\nt2'
>>> print(c)
t1
t2
>>> c = 't1\nt2'
>>> c
't1\nt2'
>>> print(c)
t1
t2
>>> c = r"t1\nt2"
>>> print(c)
t1\nt2
-
== エスケープ文字 ==
エスケープ文字は特別な文字定数です。エスケープ文字はバックスラッシュ "" で始まり、その後に 1 つ以上の文字が続きます。エスケープ文字は特定の意味を持ち、元の文字の意味とは異なるため、「エスケープ」文字と呼ばれます。
エスケープ文字 | 説明 | エスケープ文字 | 説明 | エスケープ文字 | 説明 |
---|---|---|---|---|---|
\(行末で) | 続行符 | \n | 改行 | \oyy | 8 進数、yy が表す文字、例えば:\o12 は改行を表します |
\\ | バックスラッシュ記号 | \v | 縦方向のタブ | \xyy | 16 進数、yy が表す文字、例えば:\x0a は改行を表します |
\' | シングルクォート | \t | 横方向のタブ | \other | その他の文字を通常形式で出力 |
\" | ダブルクォート | \r | キャリッジリターン | \b | バックスペース |
\a | ビープ音 | \f | ページ送り | \e | エスケープ |
\000 | 空 |
-
== 文字列の値の取得 ==
インデックス取得法(注意:インデックスは 0 から始まります)
スライス取得法
# 例
>>> a = "test"
>>> a[0]
't'
>>> a = "test"
>>> a[0:2] # インデックス0〜2のデータを取得します。0を含み、2を含まない
'te' # 前は含み、後は含まない
文字列は不変のシーケンスです
一度文字列を作成すると、それを変更することはできません
# 例
>>> a = "hello world"
>>> a[4] = "1"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
>>> id(a)
140585442705648
連結文字列
2 つの文字列を隣接させると、Python は自動的に連結します
# 例
>>> info = "chen""peng"
>>> info
'chenpeng'
-
== 文字列の一般的なメソッド ==
- == 文字列の一般的なメソッド —— 判定系列(True/False)==
メソッド | 機能 |
---|---|
str.isdigit() | 文字列が数字のみを含むかどうか |
str.isnumeric() | 文字列が数字のみを含むかどうか(中国語の一から九なども含む) |
str.isalnum() | 文字列が文字または数字のみを含むかどうか |
str.istitle() | 文字列の各単語の最初の文字が大文字で、他の文字が小文字かどうか |
str.isalpha() | 文字列が文字のみを含むかどうか(漢字も文字としてカウントされます) |
str.isupper() | 文字列が全て大文字かどうか |
str.isidentifier() | 文字列が有効な識別子かどうか |
str.isprintable() | 文字列が印刷可能な文字かどうか |
str.islower() | 文字列が全て小文字かどうか |
str.isspace() | 文字列が空白のみを含むかどうか(タブも空白としてカウントされます) |
str.startswith(prefix[,start[,end]]) | 文字列が特定の文字列で始まるかどうか、start と stop パラメータで検索範囲を設定できます |
str.endswith(suffix[,start[,end]]) | 文字列が特定の文字列で終わるかどうか、start と stop パラメータで検索範囲を設定できます |
# 例
my_str = "This Is TEST!"
my_title = "This is My Title"
my_num = "123"
my_num2 = "一二三四"
my_str2 = "hello"
my_str3 = "hello123"
# 判定系列
print("数字の判定", my_num.isdigit()) # 文字列が数字のみを含むかどうか
print("数字の判定", my_num.isnumeric()) # 文字列が数字のみを含むかどうか(中国語の一から九なども含む)
print("数字の判定", my_num2.isdigit()) # アラビア数字のみを判定
print("数字の判定", my_num2.isnumeric()) # 中国語の数字を判定可能
print("文字の判定:", my_str.isalpha()) # 空白や“!”があるとエラーになります # 文字を判定(漢字も文字としてカウントされます)
print("文字数字の判定:", my_str3.isalnum()) # 空白があるとエラーになります # 文字数字を判定
print("文字列がThisで始まるか判定", my_title.startswith("This"))
print("文字列がThisで終わるか判定", my_title.endswith("This"))
2. == 文字列の一般的なメソッド —— 検索統計類 ==
メソッド | 機能 |
---|---|
len(string) | 文字列の長さをカウント |
str.index(sub[,start[,end]]) | substring が文字列内で最初に出現するインデックス位置を表示し、見つからないとエラーになります |
str.find(sub[,start[,end]]) | substring を検索し、見つかればその開始位置を返し、見つからなければ - 1 を返します |
# 例
# 検索統計類
my_str = "This Is TEST!"
print("長さ:", len(my_str)) # 空白、!も長さにカウントされます
print("iが最初に出現する位置", my_str.index("i")) # 文字列“i”が最初に出現する位置
print("iが最初に出現する位置", my_str.find("i")) # 文字列“i”が最初に出現する位置、見つからなければ-1を返します
print("iの出現回数", my_str.count("i"))
3. == 文字列の一般的なメソッド —— 文字列変換類(新しいオブジェクトを返す)==
メソッド | 機能 |
---|---|
str.upper() | 文字列を大文字に変換します |
str.lower() | 文字列を小文字に変換します |
str.title() | 文字列内の単語の最初の文字を大文字にし、他の文字を小文字にします |
str.split('sep') | 指定した'sep' を区切り文字として文字列をリストに分割します。区切り文字は任意の文字(デフォルトは空白)です |
'str'.join(list) | リストを str で結合して 1 つの大きな文字列にします |
str.strip([string]) | 文字列の先頭と末尾の文字列を削除します。引数を指定しない場合は空白を削除します |
str.zfill(number) | 指定された長さの文字列を返し、元の文字列は右揃えされ、前に 0 が埋められます |
str.replace('old','new'[,count]) | 新しい文字で古い文字を置き換え、置き換える個数を指定することもでき、デフォルトでは全て置き換えます |
str.capitalize() | 文の最初の文字を大文字にします |
str.center(width[,fillchar])str.ljust(width[,fillchar])str.rjust(width[,fillchar]) | 元の文字列を中央(左寄せ / 右寄せ)に揃え、width は総長さで、両側を fillchar で埋めます。指定された長さが元の文字列の長さより小さい場合は元の文字列を返します |
str.expandtabs(number) | \t を number 個の空白に変換します |
# 例
# 文字列変換類
msg = " hEllo World Chen "
print("大文字", msg.upper())
print("小文字", msg.lower())
print("タイトル", msg.title())
msg2 = "root:x:0:0:root:/root:/bin/bash"
print("分割:", msg2.split(":"))
msg3 = msg2.split(":")
print("結合:", "#".join(msg3))
print("先頭と末尾の空白を削除", msg.strip(), "######")
print("rootの先頭と末尾を削除:", msg2.strip("root"))
print("文字列の埋め込み:", msg.zfill(40))
print("文字列の置き換え", msg2.replace(":", "%"))
print("文字列全体の最初の文字を大文字に", msg.capitalize())
msg4 = "xxx"
print(msg4.center(50, ' '))
print(msg4.center(50, '-'))
print(msg4.ljust(50, "-"))
print(msg4.rjust(50, "-"))
- == 文字列の連結 ==
# 例
# 文字列の連結(+)
>>> a = 'I' + 'Love' + 'Python'
>>> print(a)
ILovePython
#文字列の連結(join)
>>> a = ['I', 'Love', 'Python']
>>> print(''.join(a))
ILovePython
+ と joinの効率の問題
一般的に、+ 連結の効率は join 連結より低いです
+連結では、毎回新しいスペースがメモリに開かれるため、効率が低く、時間がかかります
joinは一度に1つの大きな文字列に連結します
- == 文字列のフォーマット ==
文字列のフォーマット(%)
基本形式
%[(name)][flags][width].[precision]typecode
-(name):命名
-flags:+,-,''または0。+は右揃えを示し、-は左揃えを示し、''は正の数の左側に空白を埋めて負の数と揃えることを示し、0は0で埋めることを示します
-widthは表示幅を示します
-precisionは小数点以下の精度を示します
# 例
# %フォーマット
name = "wen"
age = 18
print("名前: %s, 年齢: %s"%(name, age))
print("名前: %s, 年齢: %s"%(age, "wen2"))
文字列のフォーマット(format)
{変数:[埋め文字][揃え方式 <^>][幅][形式]}
# 例
# format フォーマット
name = "wen"
age = 18
print("format01 --> 名前:{}, 年齢:{}".format(name, age))
print("format01 --> 名前:{}, 年齢:{}".format(age, name))
print("format02 --> 名前: {1}, 年齢:{0}".format(name, age))
print("format02 --> 名前: {1}, 年齢:{0}".format(age, name))
print("format03 --> 名前:{name1}, 年齢:{age1}".format(name1 = name, age1 = age))
print("format01 --> {0:*>10}".format(10,20)) # 注:0 第1の変数
print("format01 --> {1:*>10}".format(10,20)) # 注:1 第2の変数
print("format01 --> {1:*<10}".format(10,20)) # 注::実行 ; * 埋め文字
print("format01 --> {1:*^10}".format(10,20)) # 注:^ 中央 ; 10 埋め幅10文字
print("format02 --> {0:.2f}".format(1/3,5.333))
print("format02 --> {1:06.2f}".format(1/3,5.333))
# 2進数
print("format02 --> {0:b}".format(10))
# 8進数 注:16進数は”{0:x}”.format(10)
print("format02 --> {0:o}".format(10))
# 千分位のフォーマット
print("format02 --> {0:,}".format(123456789))
文字列のフォーマット-f
# 例
# fフラグ フォーマット
a = "I"
b = "Love"
c = "Python"
print(f"{a}{b}{c}")
#結果 ILovePython
print("{a}{b}{c}".format(a = a, b = b, c = c)) # 注:効果は同じ
#結果 ILovePython
print(f"{a}{b}{c:a^10}") # 注:文字列cの操作:'a'で幅10を埋め、中央揃え
#結果 ILoveaaPythonaa
print("{a}{b}{c:a^10}".format(a = a, b = b, c = c)) # 注:効果は同じ
#結果 ILoveaaPythonaa
Python の数字 - ブーリアン#
ブーリアン値(Booleans)は論理値です
取値範囲はTrueとFalse(真と偽)のみです
ブーリアン値が偽である場合:
'',0,0.0,(),[],{},None,False
Noneは特別な定数で、特別なデータ型(NoneType)を示します
ブーリアン値が真である場合:
偽でないものはすべて真です
# 例
* ブーリアン値は相互に加減できます
>>> a = 1
>>> b = 2
>>> print(a == b)
False
>>> c = (a == b) + (a == d) # 注:c = 0 +1
>>> c
1
# ブーリアン値のソート
>>> lst=[(a==d),(a==b)] # 注:(a==d)は真、(a==b)は偽
>>> sorted(lst)
[False, True] # 注:デフォルトでは 0は偽、1は真
その他#
○定数
定数は一度初期化されると変更できない固定値です
注意:Pythonでは定数を表すために通常大文字(慣習的、強制ではない)を使用します。例:PI=3.1415926
○NoneType
Noneは何もないことを示します