サラッとPython入門 ~条件分岐から関数まで~

公開:2021/01/30
更新:2021/02/01
5 min読了の目安(約4500字IDEAアイデア記事

条件分岐

pythonのifは()で囲まずに表記します。
条件式の後はコロンで閉じ、インデントして次の処理を記述します。
尚、他の言語での&&はand、||はorで代替

値比較の際には==又は!=を使い、型比較の際にはis又はis notを使う(Noneかどうかの確認に使われる)

値比較

name = "kite"

if name == "kite":
    print("Hi {}".format(name))
elif name == "nancy" or name == "michel":
    print("Hello {}".format(name))
else:
    print("Oops, sorry what was your name again")
Hi kite

数値比較

他の言語では以上以下や未満超過の表記は、&&や||で各々分けていますが、Pythonでは数式と同じように記述できます

BIRTH_AGE = 0
ADULT_AGE = 20
age = 19

if BIRTH_AGE <= age < ADULT_AGE:
    print("You are a minor")
You are a minor

その他

指定した値が含まれているかの確認にはinを使います。

friends = {"kite", "syouya", "michel", "nancy"}
purpose_name = "kite"

if purpose_name in friends:
    print("You are friends")
You are friends

繰り返し

for

  • インデックス指定によるfor文
friends = ['kite', 'syouya', 'taylor']

# len()によりfriendsの長さを取得し、取得した長さに対しrange()を使う
# range()では0からfriends長さ-1までの数値を生成する
for i in range(len(friends)):
    print("Hi {}".format(friends[i]))
Hi kite
Hi syouya
Hi taylor
  • 拡張for文
friends = ['kite', 'syouya', 'taylor']

for friend in friends:
    print("Hi {}".format(friend))
Hi kite
Hi syouya
Hi taylor
  • enumerateによるfor文
friends = ['kite', 'syouya', 'taylor']

# インデックスと値をセットでforを回す
for idx, friend in enumerate(friends):
    print("{}. {}".format(idx, friend))
0. kite
1. syouya
2. taylor
  • Dictのfor文

keyとvalueをセットで回したい場合はitems()、valueだけならvalues()、keyだけならkeys()を使う

person_info = {"name": "kite", "age": 15, "height": 175}

for key, value in person_info.items():
    print(key, value)
name kite
age 15
height 175
  • zipによるfor文
name_data = ["kite", "syouya", "taylor"]
age_data = [15, 18, 20]
height_data = [175, 180, 173]

# 複数のリストをまとめて回す際などに使う
for name, age, height in zip(name_data, age_data, height_data):
    print("--------------")
    print("name : {}".format(name))
    print("age : {}".format(age))
    print("height : {}".format(height))
--------------
name : kite
age : 15
height : 175
--------------
name : syouya
age : 18
height : 180
--------------
name : taylor
age : 20
height : 173

while

基本的にwhileは他の言語と変わらないです。コロンで条件を閉じて、インデントで処理を書くぐらいの違いです。
whileは開発でもそうそう使わないのでサラッといきます。

while True:
    remark = input("Come clean!! -> ")
    if remark == "I did":
        print("Arrest you!!")
        break
    print("Do not tell a lie!!")
Come clean!! ->  I did not
Do not tell a lie!!
Come clean!! ->  I did not..
Do not tell a lie!!
Come clean!! ->  Probably not...
Do not tell a lie!!
Come clean!! ->  I did
Arrest you!!

内包表記

for文等を簡潔にし、同時にオブジェクトの生成を可能とします。
[for文 条件分岐]のように記述する。条件分岐を書かなければ通常のforによる値が生成される
tupleにしたいなら、[]を()に変えるだけ

list内包表記

# 1~100の数から偶数だけを抽出したリストを生成したい場合
even_numbers = [x for x in range(101) if x % 2 == 0]
print(even_numbers)
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38,
40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76,
78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100]

dict内包表記

# 名前のリストにIDを付与してdictに変えたい場合
names = ['kite', 'syouya', 'taylor']
name_holder = {idx:name for idx, name in enumerate(names)}
print(name_holder)
{0: 'kite', 1: 'syouya', 2: 'taylor'}

関数

defで定義し、インデント後に処理を記述していきます

my_friends = ['michel', 'kite', 'syouya', 'taylor']

# name="kite"などと記述すれば、引数指定が無い場合のデフォルト引数の設定も可能となります
def is_friend(name):
    return name in friends

print(is_friend('kite'))
print(is_friend('nancy'))
True
False

ラムダ式

ラムダ式は、defで関数を定義しなくても、関数を変数に代入することが可能となります。

lambda

# 指定された数値が偶数か確認する
# lambda 引数: 引数に対してする処理
func = lambda x: x % 2 == 0
print(func(1))
print(func(10))
False
True

map

Javaのstreamで使われるmapと同じく、引数で与えた値に対して、関数処理させることが可能

# friendsに対して、lambdaで一つづつ回して小文字変換を適用させる
# map(処理, 処理を適用させたい変数)
friends = ['SYOUYA', 'KITE', 'NANCY']
friends = list(map(lambda name: name.lower(), friends))
print(friends)
['syouya', 'kite', 'nancy']

filter

mapが各変数に処理を適用させるのに対し、filterは条件に合致したものだけ抽出する処理を行う

# 1~100の間で偶数のみを抽出
# filter(条件処理, 処理を適用させたい変数)
even_numbers = list(filter(lambda x: x % 2 == 0, range(101)))
print(even_numbers)
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38,
40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76,
78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100]