python勉強2日目 演算子/関数(def)・引数

これは僕が最高のエンジニアになるまでの物語だ。
なお、本稿のコードはそのままコピペしても動かない場合がある(iPadで執筆していて波括弧やダブルクォートが本来のものと違うため)

2日目は演算子(ブーリアン型)/関数(def)・引数を勉強。

演算子

計算したり、データや変数同士を比較してその結果に応じた処理を命令するための元となるのが演算子。

まずは計算。
1日目の記事にも書いたが、「+」で足し算ができる。

print(1 + 2)
#出力結果:3

数字を「””」 で囲まないように注意。

「-」で引き算。

print(2 - 1)
#出力結果:1

「*」で掛け算。「×」ではない。

print (1 * 2)
#出力結果:2

「/」または「//」で割り算。(「÷」ではない。)「%」で余りを出力。

print(5 / 3)
#出力結果:1.6666666666666667
print(5 // 3)
#出力結果:1
print(5 % 3)
#出力結果:2

「/」は小数点まで、「//」は小数点を切り捨てて計算結果を出力。
「%」 の使い道としては、例えばある数がある数で割り切れるかを判定するといった使い道がある。(割り切れる場合、0が出力される(ことを利用する))
応用することで、ある数はある数の倍数かを調べることもできる。

次に比較。

「==」で2つのデータが等しいか等しくないかを判定する。
判定結果は「True」または「False」で出力。(この「True」または「False」で出力することをブーリアン型という。)

X = 10
#変数「X」にデータ「10」を代入。
print(X == 10)
#変数Xの値と10が等しいかを判定する。当然、等しいので出力結果は「True」となる。

「>=」で左側の値が右側の値“以上”か判定する。
「>」で左側の値が右側の値“より”大きいか判定する。

「以上」(つまり「>=」)は右側の値も含む。

(例えば日常生活でも1000円以上お買い上げで駐車料金1時間無料と言った場合、1000円ピッタリの買い物でも駐車料金1時間無料の対象となる。)

print(5 >= 5)
#出力結果:True 左側の値(5)が右側の値(5)”以上”なので出力結果は「True」となる。
print(5 > 5)
#出力結果:False (「>」の場合は右側の値を含まないので出力結果は「False」となる

同様に
「<=」で右側の値が左側の値“以上”か判定する。
「<」で右側の値が左側の値“より”大きいか判定する

print (7 <= 5)
#出力結果:False
print (6 < 7)
#出力結果:True

「>=」「<=」は書く順番に注意。大なり(>)または小なり(<)を先に書いてからイコール(=)を書く。

and演算子またはor演算子を使うことで複雑な、複数の比較処理(判定)が可能。

and演算子は全ての比較において正しい時のみTrueを返す。

print(5 > 3 and 5 >= 4)
#出力結果:True まず左の比較(5 > 3)が正しいか判定する。結果はTrueとなる。次に右の比較(5 >= 4)が正しいか判定する。こちらも結果はTrueとなる。
両方ともTrueとなるため出力結果はTrueとなる。

print(5 >=5 and 5>5)
#出力結果:False 左側の比較判定は正しい(True)が、右側の比較判定は正しくない(False)となる。全ての比較がTrueにならないため、出力結果はFalseとなる


or演算子は全ての比較において一つでも正しいとTrueを返す。

print (5 > 3 or 5 == 4)
#出力結果:True  左の比較が正しいため、右の比較が間違っているが、出力結果はTrueとなる。
print(5 >= 6 or 5 <= 4)
#出力結果:False 左の比較・右の比較とも間違っているため、出力結果はFalseとなる。

関数(def)

関数(def)とは、特定の動作をパッケージングすること。ユーザー辞書のようなもの。

def 関数名():
    処理

といった形で使う。関数名の後に「()」と「:」を忘れないように注意
具体的には

def greeting():
    print("おはようございます")
greeting()
greeting()
greeting()

#出力結果:
おはようございます
おはようございます
おはようございます

といった感じだ。
「greeting()」の部分(関数名)が、ユーザー辞書でいう「読み」の部分でありその下の処理部分…すなわち「print(“おはようございます”)」の部分がユーザー辞書で言う「単語」にあたる。

最後のgreeting()は、ユーザー辞書を使っているイメージだ。

「おはようございます」を普通に3回出力しようと思ったら「print(“おはようございます”)」「print(“おはようございます)」「print(“おはようございます“」と3回も「print(“おはようございます”)」と書かないといけない。面倒だ。
しかし、関数(def)を使う(定義する)ことで、定義した関数(def)を3回書くだけで済んでいる

関数名のあとの()内に文字(変数)を入れることでさらに高度な処理が可能になる。
引数を指定する(渡す)ことが出来るのだ。
引数とは、変数に代入された後、関数の中で使われる値のこと。

使い方は

def 関数名 (変数):
    処理(変数)
関数名(引数)

def 関数名 (変数,変数):
    処理(変数,変数)
関数名(引数,引数)

と言った感じ。
なんのこっちゃ?と思われたかた、ご安心を。
実のところ僕もあまり理解していない。
今、これを書きながら頭の中こんがらがってる。
そんな僕が何とか思いついた解説が以下のとおりだ。

まず、具体的使い方の例を見てほしい。

def hello (name):
    print(f"Hello!,{name}")
hello ("satoshi")
#出力結果:Hello!,satoshi

注目すべきは一行目。hello(nema)=変数という関数(def)が定義されている(ユーザー辞書登録されている)ことだ。
(変数つきの関数(def)について解説しているので定義されているのは当たり前だが)

このことに気づいたら一旦、次の行は無視しよう。

次に注目すべきは定義された関数が使われている行だ。つまりhello("satoshi")の行だ。
この(“satoshi”)は引数で、変数(name)に代入される。
つまり、一行目のhelloの後の(name)=変数に、"satoshi"が代入されて、処理「print(f"Hello!,{name}"」が実行されるため、出力結果は「Hello!,satoshi」となる。

変数に代入する値が後から、それも引数という形で書かれているため、複雑に感じるが、このような比較的シンプルなコードの場合、動き的には下に書いたコードと変わらない。

name = "satoshi"
def hello ():
    print(f"Hello!,{name}")
hello()
#出力結果:Hello!,satoshi

1行目、変数nameに”satoshi”が代入される
2行目、関数helloが定義される(ユーザー辞書の読みに登録される)
3行目、関数helloの処理が書かれる(ユーザー辞書の単語に登録される)
4行目、ユーザー辞書の読み(関数(def))が入力される
結果、ユーザー辞書の単語(関数(def)によって定義された処理)が出力される

この記事が気に入ったらサポートをしてみませんか?