LoginSignup
3
1

More than 5 years have passed since last update.

Pythonのお勉強~入門編3~

Last updated at Posted at 2018-10-16

前回からの続き。
最初はここから始まりました。

制御フローとコード構造

if文

if文とかは{}で囲うんじゃなくてインデントで表現する。
これは違和感すごいけど慣れていかないとなぁ…

実行
x = -10
if x < 0:
    print('0より小さいよ!')
elif x == 0:
    print('0だよ!!')
else:
    print("0より大きいよ!!")

a = 5
b = 10
if a > 0:
    print('aは0より大きいよ!!')
    if b > 0:
        print('bも0より大きいよ!!やったね!!')
結果
0より小さいよ!
aは0より大きいよ!!
bも0より大きいよ!!やったね!!

また、入れ子にする場合、インデントが揃っていないとエラーとなるので注意。

実行
a = 5
b = 10

if a > 0:
    print('aは0より大きいよ!!')
    # ifの前に一つスペースを入れると、インデントが揃っていないのでエラー
     if b > 0:
        print('bも0より大きいよ!!やったね!!')
結果
  File "xxx/hoge.py", line 6
    if b > 0:
    ^
IndentationError: unexpected indent

論理演算子

大体同じなのでさすがに省略。

InとNotの使いどころ

Inは比較するものが含まれているか、Notはそのまま否定形(いわゆる「!」)。

実行
y = [1, 2, 3]
x = 1

# xの値がyの配列内に含まれているか
if x in y:
    print(f'x={x}はyに入っているよ!!!!')

# 100がyの配列内に含まれているか
if 100 not in y:
    print('100はyに入ってないよ!!!')

is_ok = True

# is_okがTrueではない
if not is_ok:
    print('Trueじゃないよ!!!')
else:
    print('Trueだよ!!!')
結果
x=1はyに入っているよ!!!!
100はyに入ってないよ!!!
Trueだよ!!!

値が入っていない判定をするテクニック

変数が0、空文字、空のリストなどの場合、if文でbooleanのように指定すると、falseと判定する。
1以上の数値、もしくは何かしら文字が入っている、リストに何かしら値が格納されているといった場合はTrueと判断する。
これを利用して、変数に値が入っていないか判定できる。

実行
ok_num = 1
ok_str = 'test'
ok_list = [1, 2, 3]

if ok_num:
    print('OKKKKKKKKKKKKKKKKKK!!!!!!!!!')
else:
    print('NOOOOOOOOOOOOOOOOOO!!!!!!!!!')

if ok_str:
    print('OKKKKKKKKKKKKKKKKKK!!!!!!!!!')
else:
    print('NOOOOOOOOOOOOOOOOOO!!!!!!!!!')

if ok_list:
    print('OKKKKKKKKKKKKKKKKKK!!!!!!!!!')
else:
    print('NOOOOOOOOOOOOOOOOOO!!!!!!!!!')

no_num = 0
no_str = ''
# (), {}, set()も同様
no_list = []

if no_num:
    print('OKKKKKKKKKKKKKKKKKK!!!!!!!!!')
else:
    print('NOOOOOOOOOOOOOOOOOO!!!!!!!!!')

if no_str:
    print('OKKKKKKKKKKKKKKKKKK!!!!!!!!!')
else:
    print('NOOOOOOOOOOOOOOOOOO!!!!!!!!!')

if no_list:
    print('OKKKKKKKKKKKKKKKKKK!!!!!!!!!')
else:
    print('NOOOOOOOOOOOOOOOOOO!!!!!!!!!')
結果
OKKKKKKKKKKKKKKKKKK!!!!!!!!!
OKKKKKKKKKKKKKKKKKK!!!!!!!!!
OKKKKKKKKKKKKKKKKKK!!!!!!!!!
NOOOOOOOOOOOOOOOOOO!!!!!!!!!
NOOOOOOOOOOOOOOOOOO!!!!!!!!!
NOOOOOOOOOOOOOOOOOO!!!!!!!!!

仕様だとは思いつつ、数値も0っていう値入っているじゃないと思って少し調べたら公式ドキュメントにFalseとみなすものが書いてある。
4.1. 真理値判定

Noneを判定する場合

pythonではnullを「None」で表現する。
変数がNoneかどうかを判定する場合は「is」を使用する。

実行
is_empyty = None
if is_empyty is None:
    print('Noneだよ!!!!!!!!!!!')
結果
Noneだよ!!!!!!!!!!!

while文

特筆することは多分なし。

実行
count = 0
while True:
    if count >= 5:
        break
    if count == 3:
        print('3だけアホになります')
        count += 1
        continue
    print(count)
    count += 1
結果
0
1
2
3だけアホになります
4

while else文

whileを抜けると最後にelseの処理をする。

実行
count = 0
while count < 5:
    print(count)
    count += 1
else:
    print('done')
結果
0
1
2
3
4
done

ただし、breakでwhileを抜けた場合はelseの処理は行われない。

実行
count = 0

while count < 5:
    if count == 2:
        break
    print(count)
    count += 1
else:
    print('done')
結果
0
1

input関数

コマンドラインから入力した値を受け取るあれ。

実行
while True:
    word = input('川:')
    if word == '谷':
        print('YES!')
        break
    print('NO!')
結果
川:海
NO!
川:谷
YES!

for文

こちらも特筆することは多分なし。

実行
some_list = [1, 2, 3, 4, 5]
for i in some_list:
    print(i)

word = 'abcdefg'
for s in word:
    if s == 'd':
        continue
    if s == 'f':
        break
    print(s)
結果
1
2
3
4
5
a
b
c
e

for else文

while else文と同じ。

実行
fruits = ['apple', 'banana', 'orange']
for fruit in fruits:
    print(fruit)
else:
    print('全部食べました!!!!!')
結果
apple
banana
orange
全部食べました!!!!!

range関数

指定した長さのリストを生成する。
for文でよく使われるらしい。

実行
# 0~9まで
for i in range(10):
    print(i)

# 5~9まで
for i in range(5, 10):
    print(i)

# 3個飛ばしで2~9まで
for i in range(2, 10, 3):
    print(i)
結果
0
1
2
3
4
5
6
7
8
9
5
6
7
8
9
2
5
8

使わない値は「_」に入れるというお約束?があるらしい。
コーディング規約とかであるのかな?これも後日調べてみる。

実行
for _ in range(5):
    # iなんて使わないぜ
    print('hoge')
結果
hoge
hoge
hoge
hoge
hoge

enumerate関数

要素のインデックスと値を同時に取り出せる。
これもよく使われるらしい。

実行
fruits = ['apple', 'banana', 'orange']
for i, fruit in enumerate(fruits):
    print(i, fruit)
実行
0 apple
1 banana
2 orange

zip関数

複数のリストをまとめて取得できる。

実行
days = ['Mon', 'Tue', 'Wen']
fruits = ['apple', 'banana', 'orange']
drinks = ['coffee', 'tea', 'beer']

for day, fruit, drink in zip(days, fruits, drinks):
    print(day, fruit, drink)
実行
Mon apple coffee
Tue banana tea
Wen orange beer

辞書をforで処理する

items()を使うとkeyとvalueが取れる。

実行
d = {'x': 100, 'y': 200}
for k, v in d.items():
    print(k, ':',  v)
結果
x : 100
y : 200

items()は辞書の中身をタプルのリストで返してくれる。
文章にするt(ry

実行
d = {'x': 100, 'y': 200}
print(d.items())
結果
dict_items([('x', 100), ('y', 200)])

制御フローとコード構造のセクションちょっと長いのでいったんここで区切ることにする。
続きはまた後日。

3
1
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1