情報処理概論

九州大学 工学部地球環境工学科 講義資料 担当：木村

03. 条件分岐・多分岐

処理の「流れ」を制御する
１）プログラムは基本的に上から下へ順番に実行される
２）制御構造によって条件分岐や反復を行うことができる

条件分岐
if - else 文， if – elif – else 文
反復for 文，while 文

条件分岐
例： 数値の平方根を求めるプログラム• 根号の中の数字が正の数のときは平方根を求めることができる．
• 根号の中の数字が負の数のときは平方根を求めることができない．

与えられた数値が正の数であるかを調べてから計算する．

if - else 文
if 条件式:
ブロックA
else:
ブロックB

条件式

T

T : 真（条件が成立）
F : 偽（条件が不成立）

F

ブロックB

ブロックA

「条件式」が成り立てばブロックＡを，成り立たなければブロックＢを実行
 ブロックは単文でも複文でも可能 else以下は省略可能if - else 文の使用例
sqrt関数を使うために必要条件式
条件が成り立つ場合に実行される部分条件が成り立たない場合に実行される部分

ブロックとインデント•••

ブロックの開始はインデント（字下げ）によって表現される．
同一ブロック内ではインデントを維持．
インデントをなくすことによりブロックの終了を表現．

インデント（空白）比較演算• 条件式の中には，比較演算や論理演算を書く．

等号を2つ続ける

演算子
<<=>
>=
==
!=

意味
左辺が右辺より小さい
左辺が右辺以下
左辺が右辺より大きい
左辺が右辺以上
左辺が右辺と等しい
左辺が右辺と等しくない

論理演算子

例 (A,Bはbool型)

andA and B

A,Bが共に真のときのみ真or

A or BA，Bいずれか一方が真ならば真

not

not A

Aが真ならば偽，偽ならば真比較演算の例• 条件式の中には，比較演算や論理演算を書く．

注意！ 等号を2つ続ける
左辺は右辺と同じ？
if age == 20:
print(“成人式に出席してください。")
else:print(“お帰りください")ageは16以上19未満？

注意！： 数学の不等式みたいに
if (16 <= age < 19):

インデント（空白）が異なるので下は別のブロックと書くとエラー

if (age >= 16) and (age < 19):
print("You may be a high school student.”)
else:
print(“Otherwise.")print(“どちらに分岐しても、分岐後はこの行が実行されます”)

7T : 真（条件が成立）
F : 偽（条件が不成立）

if – elif – else を用いた多分岐
if 条件式１:
ブロックA

条件式１

elif 条件式２:

F

ブロックB
else:
ブロックC

条件式２
F

ブロックC
ブロックA，ブロックB，ブロックCのうち，いずれか1つが実行される．

TブロックAT

ブロックB

多分岐の例

インデント（空白）が異なるのでＣとＤのブロックは区別

print("年齢を入力してください：");a = input()a = int(a)charge = 0
if a >= 18:
print("大人料金1,000円¥n")charge = 1000
elif a >= 12:
printf("中・高生料金800円¥n")charge = 800
else:
print("子供料金500円¥n")charge = 500
wallet=wallet-charge DAB

このうちの１つが実行される．

CA, B, またはC のブロック実行後にＤが実行される

分岐の入れ子• if - else 文のブロックの中に if - else 文を記述しても構わない．
T : 真（条件が成立）
F : 偽（条件が不成立）

if 条件式1:

条件式１

F
ブロックT
else:
ブロックC

T
条件式２
ブロックT

F

ブロックC

ブロックB

T
ブロックA

分岐の入れ子• if - else 文のブロックの中に if - else 文を記述しても構わない．
T : 真（条件が成立）
F : 偽（条件が不成立）

if 条件式1:

条件式１（ブロックT内）

if 条件式2:
ブロックA
ブロックT else
ブロックB

else:
ブロックC

FT

ブロックT
条件式２F
ブロックC

ブロックB

T
ブロックA

分岐の入れ子の例
if age >= 16 :ブロックT
if age < 19 :print("You may be a high school student.”) Aelse:
print(“You are older than high school students.”) Belse:
print(“You are younger than high school students.") C

まとめ

条件分岐

if - else 文， if – elif – else 文

インデント（字下げ）をそろえて「ブロック」を表現
分岐を判断する「条件式」の中は「比較演算」＋「論理演算」「ブロック」の中に別の条件分岐＝入れ子

第３回 レポート課題
変数 a,b,c （float型) の値を入力すると、2次方程式 ax2 + bx + c = 0 の解を求めるプログラムを作成せよ．
- 重解を正しく表示しなさい．
- 実数解を持たない場合は，「実数解なし」と表示せよ． （判別式 b2 - 4ac の値で条件分岐する．）- 解が２つあるので，変数「x1」と「x2」に値を代入する．
- 2次方程式の解の公式は右のとおり：
b  b 2  4ac
b  b 2  4ac【注意】判別式が負のとき計算してはダメx1 

そのための条件分岐

2ax2 2a

下記の課題提出用フォルダへ、課題の番号と提出者が分かるようにファイル名を以下のようにしてアップロードせよ
第３回1TE19xxxZ名前.py
https://share.iii.kyushu-u.ac.jp/public/lRbwAAVITI5A2X4BE45t6TqQIE0UQSQUl5Bap_kZ_sjy
講義資料、および上記フォルダへのリンクは下記ホームページから
http://sysplan.nams.kyushu-u.ac.jp/gen/edu/InfoProcess/2019/index.html

レポート課題のヒント

平方根の計算のため算術関数
math.sqrt() 関数を使用するため必要

import mathprint(“xの２次方程式 a x^2 + b x + c = 0 の係数aの値を入力してください”)moji = input()
文字列をfloat(浮動小数)型へ変換し、変数xへ格納
a = float( moji )キーボードから文字列入力し変数mojiへ格納

print(“xの２次方程式 a x^2 + b x + c = 0 の係数bの値を入力してください”)moji = input()b = float( moji )print(“xの２次方程式 a x^2 + b x + c = 0 の係数cの値を入力してください”)moji = input()c = float( moji )#------判別式Dの値を計算
D = b*b-4*a*c#-------以下、条件分岐を記述すること#--------例えば以下のような命令で解を出力：
print(“方程式の解：x1=“,x1,”x2=“,x2)“（クォーテーション）は半角になっていることを確認すること（コピペすると全角であることが多い）