Python v3.10.5 オレオレチートシートです。
当記事は独学プログラマーという書籍を参考に作成しました。
ただし、各説明書きは調べながら私の解釈で書き換えており、コードの例文も適宜アレンジしています!
もちろん、一番正確な情報が知りたい場合はご自身でPython公式ドキュメントを確認してネ!
あと独学プログラマーはPythonの基礎文法書としての側面だけではなく、「チャレンジ」と銘打って応用問題や少し踏み込んで学習をするためのキーワードを教えてくれたり、エンジニアの就業・キャリアに関しても触れていたりして初学者にとっては幅広く参考になる良書です。ぜひご自身でも読んでみてネ。
標準入出力
標準出力・標準入力
print("出力文字列")
input("ユーザーからの入力を待機しています:")
文字列と変数を合わせて出力するときはカンマ区切りでOK。
n = 3
print("出力文字列",n)
構文の途中で改行を行いたいときはバックスラッシュ
print\
("実行結果は変わらない")
演算子
算術演算子
- 四則演算 … +-*/
- 累乗 … **
- 剰余 … %
- 整数の割り算(小数点以下切り捨て) … //
比較演算子
- より大きい … >
- より小さい … <
- 以上 … >=
- 以下 … <=
- 等価 … ==
- 非等価 … !=
論理演算子
- かつ … and
- あるいは … or
- 否定 … not
for文・if文 と インデントについて
Pythonはインデントで構文を認識する。
for文・if文のなかで処理するコードは適切に字下げする必要がある。
繰り返し処理
for i in range(100):
print("文字列")
分岐処理 ※elif に注意
time = "朝"
if time == "朝":
print("おはよう")
elif time == "夜":
print("こんばんは")
else:
print("こんにちは")
関数の定義
def function_name(arg):
local_variable = arg
local_variable *= 3 #演算した後の結果を変数に再代入する処理
return local_variable
- def 句で関数を宣言する
- function_name は 関数名(任意)
- arg は 引数名(任意)
- local_variable は 関数内で定義する変数名(任意)。宣言した関数の中でのみ参照できる。
- return 句で値を返し、関数の処理を抜ける。returnがない関数の場合、Noneを返す関数になる。
組み込み関数の使い方
関数名(引数)という感じで処理できる。
len("文字列") # 引数のオブジェクトの長さ(文字数など)を返す
str(100) # 引数のオブジェクトをStrデータ型に変換する
int('100') # 引数のオブジェクトをIntデータ型に変換する
例外処理
try句でエラーをキャッチ、except句でエラー時の処理を実行
a = 10
b = 0
try:
print(a/b)
except ZeroDivisionError: # 0除算のエラー発生を検知して下部に続くコードを実行
print("bの値が0です")
注意として、try句の中で定義した変数はexcept句のなかで使用しないこと。
これは変数が定義される前段階で例外が発生した場合、変数未定義の例外が発生するため。
ドキュメンテーション文字列
ドキュメンテーション文字列とは、関数の説明等に使うことができる特殊なコメントアウトのこと。
1行目に関数の説明、その下に引数とその型や返り値について書く。
def add(x,y):
"""
x + yの値を返します。
:param x: int.
:param y: int.
:return: int sum of x and y.
"""
return x + y
イテラブルなオブジェクト
イテラブルなオブジェクトとは、繰り返し系の処理で要素を1つずつ取り出せるコンテナのこと。
様々な値を格納でき、格納した値のインデックスを持っている。
リスト
リストはミュータブル(変更可能)なコンテナで、定義したあとに要素を追加・変更することができる。
listメソッドで空の状態で生成できるが、角型の括弧([] … 大括弧)を使うことで要素を入れた状態で宣言できる。
fruit = list()
fruit = ["Apple","Orange","Pear"]
appendメソッドで最後尾に新しい要素を追加できる
fruit.append("Banana")
出力時はインデックスを指定する。
print(fruit[1])
インデックスは0から数えるので、この場合Orangeが出力される。
もし存在しないインデックスを指定した場合、例外「IndexError: list index out of range」となる。
リスト内の要素を変更するときもインデックスを指定する。
fruit[2] = "Peach" # この場合、PearがPeachに置き換わる
popメソッドを使用することでリストの最後尾から要素を除去できる。
ただし、リスト内が空のときは使えず、例外が発生する。
fruit.pop()
リスト同士は+演算子で結合できる。
fruit_other = ["Grapes","Kiwi","Melon"]
fruit + fruit_other
リスト内に何の要素があるか調べたいときはこうする。
"Apple" in fruit # True
"Orange" not in fruit # False
len(fruit) # 4
- in … 演算子。リスト内に特定の要素が入っていたらTrue、なければFalseを返す。
- not in … 演算子。リスト内に特定の要素が無ければTrue、あればFalseを返す。
- len … メソッド。引数で渡したコンテナの中にいくつの要素があるかを返す。
タプル
タプルはリストと違ってイミュータブル(変更不可)なコンテナ。
要素をあとから追加・変更することができない。
タプルは処理中に要素が変わってほしくない値のセット(緯度・経度の座標データなど)を格納したいとき等に使う。
タプルは丸括弧を使って宣言する。
タプルは要素が1つの場合でも、要素の末尾にカンマをつけること。
⇒ これは丸括弧を使っていて数式の計算時の丸括弧だと誤認されないようにするため。
my_tuple = ("Number","Name","Old")
other_tuple = ("Number",)
タプルは一度作成したあとは要素の追加や変更はできず、変更しようとすると例外が発生する。
(そのため、要素がない状態でタプル型を作ることができるtupleというメソッドもあるが使用機会がほとんどないと思う)
タプルでもリストと同じくインデックスで要素を取り出すことができ、
inやnot in演算子も同じように使える。
また、リストとは違い、次項目の辞書コンテナのキーとしてタプルを使うことができる。
辞書型
2つのオブジェクトを関連付けて保持するコンテナ。
オブジェクトの1つがキー、もう一つがバリューといって2つで1セットであり、キーバリューペアと呼ぶ。
キーバリューペアを辞書に追加すると、キーからバリューを取り出すことができる。
ちなみにバリューからキーを取り出すことはできない。
辞書はミュータブルなので新しい要素を追加変更できるが、リストやタプルと違い、格納の順番を指定できない。
たとえばひとりの人のデータを扱うとき、heightをキーとしてその人の身長(数値)をバリューとして関連付け、国籍や目の色、氏名などを同じように保持することでそれらのデータをひとつの辞書コンテナに格納することができる。
辞書型を宣言するときは波括弧を使う。要素は、キー: バリュー と書く。
また、dict()というメソッドでも空の辞書コンテナを宣言できる。
my_dict = {"Name": "hogehoge",
"nationality": "foobar"}
my_dict2 = dict()
タプルとは違い、要素が1つしか無い場合でも最後にカンマを付ける必要はない。
また辞書はキーの順番については情報を保持していないため、なにかの例と同じコードを書いて要素を出力しても、異なる順番で出力されることがある。そういう仕様なので全く問題ない。
辞書型にキーバリューペアを追加する際は 辞書名[キー] = [バリュー] と書く。
my_dict2["Name"] = "Sato"
my_dict2["Age"] = 23
値(バリュー)を取り出すときは 辞書名 [キー] と書く。
print(my_dict2["Name"])
print(my_dict2["Age"])
どんなオブジェクトも辞書のバリューに使えるため、上記の通りであればSatoは文字列、23は整数として取り出せる。
ただし、辞書のキーはバリューと違って変更不能(イミュータブル)でなければいけないため、キーとして使うなら文字列やタプルである必要があり、変更される可能性のあるリストや辞書を辞書のキーとして使うことはできない。
また、辞書型にもin・not in の演算子を使うことができるが、確認できるのは辞書内のキーのみであり、辞書内のバリューを調べることはできない点に注意すること。
また、辞書に追加されていないキーでバリューを取り出そうとすると例外が発生する。
キーバリューペアを辞書から削除するときは del 句を使い、del 辞書名[キー] と書く。
del mydict2["Age]
辞書型を使うと、たとえばこんなコードが書ける。
songs = { "fun" : "EDM",
"blue" : "Jazz",
"chill" : "Lo-Fi"}
feel = input("How are you feeling?:")
if feel in songs:
song = songs[feel]
print("I Recommend:",song)
else:
print("Sorry. I have no idea.")
入力した文字列が変数に代入され、その変数を辞書のキーとする。
in演算子により、キーが存在すれば対応しているバリューが出力され、存在しない場合は辞書を参照しない。
実行してみるとこんな感じ。
コンテナの応用
コンテナは入れ子にできる。リストの要素としてリストやタプルを持たせたり、タプルの要素にリストや辞書を持たせたりできる。
area = {
"座標": (43.068661, 141.350755),
"著名人": [
"大泉洋",
"藍井エイル",
],
"地名": {
"国": "日本",
"都道府県": "北海道",
"市区町村": "札幌市",
}
}
独学プログラマーのチャレンジに「setというコンテナについても調べてみよう」ということが書いてあったので、こちらも調べたことを簡単にメモっておく。
set型
set型もコンテナの1つ。集合を表す。要素は順番を持たず、重複しない(ユニーク)。
生成時に重複する要素があった場合は取り除かれる。またset型に辞書型を格納するとキーだけが要素となる。
set型を生成するときの書き方は波括弧で、要素をひとつひとつカンマで区切る。
辞書型と同じく波括弧だが、コロンを使わないため辞書型と区別される。
ただし、空の波括弧で宣言すると辞書型が生成されてしまう点には注意。
- 空のset型を作る場合はset()
- 要素を追加する場合はadd()
- 特定の要素を取り除くときはremove()
- すべての要素をクリアする場合はclear()
set1 = set()
set1.add(1)
set1.add(2)
set1.remove(2)
set1.clear()
set型では集合演算(論理演算)を行うことができる。
set1 = set([10, 20, 30, 40, 50])
set2 = set([10, 30, 50, 70, 90])
set3 = set([10, 20, 30])
set1 | set2 # 和集合を求める set([10, 20, 30, 40, 50, 70, 90])
set1 & set2 # 積集合を求める set([10, 30, 50])
set1 - set2 # 差集合を求める set([20, 40])
各計算についてはだいたいこんな認識。
- 和集合 … 集合1と集合2の要素を合算する。重複している要素は取り除く
- 積集合 … 集合1と集合2の間で、どちらにもある要素のみ取り出す
- 差集合 … 集合1にあって集合2にない要素のみ取り出す
親集合をsuperset、その構成要素を使っている部分集合をsubsetと呼び、それぞれをメソッドで判定できる。
set3.issubset(set1) # True
set3.issubset(set2) # False
set1.issuperset(set3) # True
- セット〇〇はセット✕✕のサブセット(部分集合)ですか? → True / False
- – セット△△はセット□□のスーパーセット(親集合)ですか? → True / False
…みたいな書き方をする。issubsetって全部小文字だと読みづらいね😗
set型についてはこちらを参考にさせていただきました!↓
文字列操作
三重クォート文字列
Pythonでは通常のダブルクォートで文字列を囲っている場合、途中で改行してしまうと構文エラーになる。文字列を複数行に渡って記述したい場合、ダブルクォートを三重に重ねる必要がある。
""" そろそろ改行したい
改行した
改行してしまった
"""
文字列のインデックス
文字列はリストやタプルと同じようにイテラブルなので、文字列中のどの文字であってもインデックスを指定することで取り出すことができる。
他のイテラブルなオブジェクトと同じく、文字列の最初の文字はインデックス0。その後に続く文字も1文字につきインデックスを1ずつ加算していくことで順番に参照できる。
ただし、文字数よりも大きいインデックスを指定して取り出そうとすると例外が発生する。
myName = "mick"
myName[0]
myName[1]
myName[2]
また、Pythonの場合はマイナスインデックスを使うこともできる。
イテラブルは通常左から右にインデックス値を数えるが、マイナスの数値を指定した場合は右から数えて要素を取り出す。
たとえばインデックスに-1を指定すると、イテラブルの一番右の要素を取り出す。
-2を指定した場合は右から2つ目、-3なら右から3つ目…と数えていく。
myName = "mick"
myName[-1] # k
myName[-3] # i
文字列はイミュータブル
文字列はタプルと同じようにイミュータブルである。
文字列はその一部を別の文字に入れ替えることはできず、文字を入れ替えるなどをしたいときはreplaceメソッドを使用するか、新しい文字列を作らなければいけない。
ただ、Pythonにはある文字列からちょっとだけ変更した新しい文字列を作り出すメソッドがいくつもある。
文字列の足し算
文字列同士は+演算子により1つにまとめることができる。
このような文字列同士の足し算のことを連結という。
myName = "mick"
"This is " + myName
文字列のかけ算
文字列に対して*演算子で掛け算を行うと、かけた数だけ文字列を反復させることができる。
myName = "mick"
myName * 4 # mickmickmickmick
大文字小文字の変換
文字列をすべて大文字にするには upper メソッドを使う。
同様に、文字列をすべて小文字にするには lower メソッドを使う。
myName = "mick"
myName.upper() # MICK
myName.lower() # mick
コメント