masakunの日記: 第3章 条件分岐(すっきりPython 118~158頁) 1
☆☆☆ 文と制御構造 ☆☆☆
1行=ひとつの実行単位=文
name = '松田'
year = 2019 - 23
print(name + 'くんは' + str(year) + '年生まれ')
文の実行順をコントロールするプログラムの構成を制御構造といい、代表的な構造が「順次」「分岐」「繰り返し(ループ)」です。この3種類の制御構造を組み合わせることで、どんなに複雑なプログラムでも作成できることが理論上可能である(構造化定理)
name='松田'; year = 2019 -23; print(f'{name}くんは{year}年生まれ')
name, year = '松田', 2019-23; print(f'{name}くんは{year}年生まれ')
文の終わりにセミコロンを入れることで、1行に複数の文を記述することができる。
n = 1 + 2 \
+ 3
print(f'答えは{n}。\
改行しても足し算できたよ')
なおバックスラッシュ(日記では\で表示)を行末に入れると、複数行に分けて記述できる。
☆☆☆ 条件分岐と基本構造 ☆☆☆
if 条件式:
条件が成立したときの処理(if ブロック)
else 条件式:
条件が成立しなかったときの処理(else ブロック)
name = input('名前教えろコラ>>')
print(f'{name}さん、こんにちは。')
food = input(f'{name}さんの好きな食べ物を教えてください')
if food == 'カレー':
print('素敵です。カレーは最高ですよね')
else:
print(f'わたしも{food}が好きですよ')
必ずインデントでブロックを指定する。
ブロック内の各文は半角スペースの個数もそろえておく。
☆☆☆ 条件式 ☆☆☆
〇比較演算子
== 左辺と右辺は等しい
!= 左辺と右辺は等しくない
> 左辺は右辺より大きい
< 左辺は右辺より小さい
>= 左辺は右辺より大きいか等しい
<= 左辺は右辺より小さいか等しい
〇in演算子
先のチャットボットは「カレー」にしか反応しなかったが、こちらはカレーさえ含まれていさえすれば、どんなものにでも反応するようになった。
name = input('名前教えろコラ>>')
print(f'{name}さん、こんにちは。')
food = input(f'{name}さんの好きな食べ物を教えてください')
if 'カレー' in food:
print('素敵です。カレーは最高ですよね')
else:
print(f'わたしも{food}が好きですよ')
in 演算子の右辺にはコレクションを使用することもできる。
scores = [80, 100, 90, 20, 60]
if 100 in scores:
print('満点の試験があったんですね')
else:
print('次はどれかひとつでも満点をとろう')
応用としてディクショナリのキーチェックができる。
addres = {4200838:'相生町', 4212309:'相淵',
4211307:'相俣', 4200017:'葵町',
4211305:'赤沢', 4200963:'赤松',
4200948:'秋山町', 4200810:'上土',
4200811:'上土 新田', 4200968:'あさはた',
4212125:'足久保 奥組', 4212124:'足久保 口組'}
key = int(input('追加する郵便番号を入れてください>>'))
if key in addres:
print('登録済みです')
else:
data = input('静岡市葵区の地区名を入れてください>>')
addres[key] = data
print(addres)
なお値の大小は、その文字に対応した文字コードによって、文字列でも比較することができる。
〇真偽値
条件が成立したら True, 成立しなければ False を返す(bool 型)
score = int(input('試験の点数を入力>>'))
print(score >= 90)
実行結果
試験の点数を入力>> 80
False
〇論理演算子
and かつ
or または
not でなければ
if score >= 60 and score 100: #60点未満または100点を超えていたら
if not (score 100): #60点未満または100点超えでいなければ
if not '野菜' in food: # food に'野菜'が含まれていなければ
☆☆☆ 分岐構造のバリエーション ☆☆☆
〇if-else 構文
if 条件式:
条件が成立したときの処理(if ブロック)
else:
条件が成立しなかったときの処理(else ブロック)
〇if のみ構文
if 条件式:
条件が成立したときの処理(if ブロック)
条件式が成立しなかったときは何もしない場合 else は省略できる。
空ブロックを作りたいときは pass で、何もしないことを表明する。
〇if-elif 構文
条件が成立しなかったときに、別の条件式で判定したいときに使う。
if 条件式1:
条件1が成立したときの処理(if ブロック)
elif 条件式2:
条件1は成立せず、条件2で成立したときの処理
elif 条件式n:
条件1~条件n-1で成立せず、条件n で成立したときの処理
else:
全ての条件が成立しなかったときの処理(else ブロック)
else ブロックは省略可能。
score = int(input('点数を入力してください'))
if score 100:
print('ありえません')
elif score >= 60:
print('合格\nよく頑張りましたね')
else:
print('残念ながら不合格\n追試を受けてください')
〇if 文のネスト
if 条件式1:
ブロック1
if 条件式2:
ブロック2
else:
ブロック3
ブロック4
ブロックを指示するのはインデントなので間違えないように(無限ループの罠w)
〇三項条件演算子
たとえば入力した数字が偶数かを判定する以下のプログラムは、
number = int(input('数値を入力>>'))
if number % 2 == 0: #2割ったときの余りが0だったときに
print('偶数です')
else:
print('奇数です')
このように簡潔に表現できる。
number = int(input('整数を入力>>'))
number = '偶数' if number % 2 == 0 else '奇数'
print(f'{number}です')
実行結果
整数を入力>> 74
偶数です
プログラマーは本当のelse(パイソンの)を知らない (スコア:0)
パイソンのelseはif文以外にもつかえる。ループや例外処理にも使える。このおかげで他の言語だと面倒なことができる。反面他の言語で簡単なことが面倒。と