【Python】条件分岐、繰り返し、例外処理

Python

if文

if 条件式:
 条件式が成立時の実行内容

条件に合えば実行する。

i = 3

if i > 1:
    i = 0
print(i)

>>> 0
i = 3

if i > 4:
    i = 0
print(i)

>>> 3

if ~ else文

if 条件式:
 条件式が成立時の実行内容
else:
 条件式が不成立時の実行内容

english_score = 60
score_passed = 80

if english_score >= score_passed:
    result = "合格"
else:
    result = "不合格"
    result += "/" + "あと" + str(score_passed - english_score)
    
print(english_score)
print(result,"点")

>>> 60
不合格/あと20 点
english_score = 90
score_passed = 80

if english_score >= score_passed:
    result = "合格"
else:
    result = "不合格"
    result += "/" + "あと" + str(score_passed - english_score)
    
print(english_score)
print(result,"点")

>>> 90
合格 点

上記は、以下のように簡略化して記述することも可能です。

english_score = 90
score_passed = 80

result = "合格" if english_score >= score_passed else "不合格"

result += "/" + "あと" + str(score_passed - english_score)
    
print(english_score)
print(result,"点")

>>> 90
合格/あと-10 点

if ~ elif ~ else文

if 条件式1:
 条件式1が成立時の実行内容
elif 条件式2:
 条件式1が不成立で、条件式2が成立時の実行内容
else:
 条件式1と条件式2が不成立時の実行内容

from random import randint
point = randint(1, 30)

if point >= 30:
    result = "松"
elif point >= 20:
    result = "竹"
elif point >= 10:
    result = "梅"
else:
    result = "やり直し"
    
print(f"{point} / {result}")

>>> 21 / 竹

if文のネスティング

from random import randint
point = randint(10, 30)
score = randint(50, 100)

if point >= 20:
    if score >= 70:
        result = "合格"
    else:
        result = "不合格"
else:
    result = "不合格"
    
print(f"{point} / {score} : {result}")

>>> 25 / 76 : 合格

上記は、論理演算子の「and」を使って書くことも出来ます。

from random import randint
point = randint(10, 30)
score = randint(50, 100)

if point >= 20 and score >= 70:
        result = "合格"
else:
    result = "不合格"
    
print(f"{point} / {score} : {result}")

>>> 25 / 76 : 合格

論理演算子の「or」で書くと条件のどちらか一方が成立した時に、”合格”になります。

from random import randint
point = randint(10, 30)
score = randint(50, 100)

if point >= 20 or score >= 70:
        result = "合格"
else:
    result = "不合格"
    
print(f"{point} / {score} : {result}")

>>> 17 / 88 : 合格

if not ~ 文

notで否定されるため、~ がFalseの時に条件が成立する。

Falseと見なされる値
・Flase
・None
・0
・( )、{ }、[ ]

#nameがFalseの時に”名無しのごんべ”が実行される
name = ""
if not name:
    name = "名無しのごんべ"
    
print(name)

>>> 名無しのごんべ
#nameがFalseの時に”名無しのごんべ”が実行される
name = 0
if not name:
    name = "名無しのごんべ"
    
print(name)

>>> 名無しのごんべ
#nameがFalseの時に”名無しのごんべ”が実行される
name = None
if not name:
    name = "名無しのごんべ"
    
print(name)

>>> 名無しのごんべ
#nameがFalseの時に”名無しのごんべ”が実行される
name = ( )
if not name:
    name = "名無しのごんべ"
    
print(name)

>>> 名無しのごんべ

if文の簡略化

from random import randint
point = randint(10, 30)

if 20 <= point <= 30:
    print(point, "/ 合格")
else:
    print(point, "/ 不合格")

>>> 26 / 合格

while文

条件に合えば実行を繰り返す。(処理を強制的に止める場合は、controlキー+Zキーを押す)

while 条件式:
 条件式が成立時の実行内容

count = 0

while count <= 3:
    print(count)
    count += 1

>>> 
0
1
2
3
from random import randint
kuji = 3
point = 0
#3桁右詰
fmt = "{:>3}" 
# くじがなくなるまで繰り返す
while kuji > 0 :
    score = randint(1, 10)
    print(fmt.format(score))
    point += score
    kuji -= 1 # チケットを1枚減らす

print("ー" * 3)
print("計",format(point))

>>> 
  7
  1
  2
ーーー
計 10

break:無限ループを止める

from random import randint
# 値の合計が10になるまで無限ループ
while True :
    a = randint(1, 5)
    b = randint(1, 5)
    c = randint(1, 5)
    # 合計が11でbreak
    if (a+b+c) == 11:
        break
        
print(a, b, c)

>>> 4 3 4
from random import randint
#誤答数
miss = 0
# 正解数
correct = 0

print("【問題】3回間違える、もしくは、qで終了")

while miss < 3 :
    a = randint(1, 5)
    b = randint(5, 10)
    ans = a + b
    #出題文
    question = f"{a}+{b}="
    #キーボード入力を求める
    value = input(question)
    #qキーの入力でbreak
    if value == "q":
        break
    #回答の採点
    if value == str(ans) :
        correct += 1
        print("正解")
    else :
        miss += 1
        print("誤答", "×" * miss) 
        
print("ー" * 5)
print("正解:", correct)
print("誤答:", miss)


>>> 【問題】3回間違える、もしくは、qで終了
4+7=10
誤答 ×
2+5=7
正解
2+6=6
誤答 ××
2+7=8
誤答 ×××
ーーーーー
正解: 1
誤答: 3

continue:繰り返しをスキップ

from random import randint

# 空のリスト
numbers = []  

# numbersが5個になるまで繰り返し
while len(numbers)<5 :
    number = randint(0, 10)
    if number in numbers :
        # numberがnumbersに含まれていたらスキップ
        continue
    # numbersにnumberを追加
    numbers.append(number)
    
print(numbers)

>>> [10, 8, 3, 9, 7]

while ~ else:繰り返した後で実行

while 条件式:
 条件式が成立時の実行内容
else:
 条件式が不成立時の実行内容

from random import randint

# 空のリスト
numbers = []  

# numbersが5個になるまで繰り返し
while len(numbers)<5 :
    number = randint(-5, 10)
    if number < 0:
        # numberがマイナス値でbreak
        print("途中終了")
        break
    if number in numbers :
        # numberがnumbersに含まれていたらスキップ
        continue
    # numbersにnumberを追加
    numbers.append(number)
else: 
    print(numbers)

>>> 途中終了
from random import randint

# 空のリスト
numbers = []  

# numbersが5個になるまで繰り返し
while len(numbers)<5 :
    number = randint(-5, 10)
    if number < 0:
        # numberがマイナス値でbreak
        print("途中終了")
        break
    if number in numbers :
        # numberがnumbersに含まれていたらスキップ
        continue
    # numbersにnumberを追加
    numbers.append(number)
else: 
    print(numbers)

>>> [7, 2, 5, 4, 10]

for文:処理を繰り返す

#リスト内の値を順に取り出す
numbers = [1, 3, 5, 7, 9]
for number in numbers:
    print(number, end=", ")

>>> 1, 3, 5, 7, 9, 

for i in range(開始値, 終了値, ステップ数):
 実行内容

#指定回数繰り返す
for number in range(5):
    print(number, end=", ")

>>> 0, 1, 2, 3, 4, 
#開始値〜終了値まで繰り返す
for number in range(5, 10):
    print(number, end=", ")

>>> 5, 6, 7, 8, 9, 
#開始値〜終了値まで2つ飛ばしで繰り返す
for number in range(5, 10, 2):
    print(number, end=", ")

>>> 5, 7, 9, 

for文のネスティング

for i in range(3) :
    print("for1 =", i)
    for j in range(2) :
        print(" ", "for2 =", j)

>>> 
for1 = 0
  for2 = 0
  for2 = 1
for1 = 1
  for2 = 0
  for2 = 1
for1 = 2
  for2 = 0
  for2 = 1

break:繰り返しを中断

numbers = [0.0, 1, 3, 5, 7,"q", 12] 
sum = 0
for number in numbers :
    # numbersが数値ではない時にbreak
    if not isinstance(number, (int, float)) :
        print(number, "数値ではありません")
        break
    sum += number
    print("number:",number, "/", "sum:",sum)

>>> 
number: 0.0 / sum: 0.0
number: 1 / sum: 1.0
number: 3 / sum: 4.0
number: 5 / sum: 9.0
number: 7 / sum: 16.0
q 数値ではありません
for i in range(2) :
    for j in range(3) :
        if i < j :
            print("break," * j)
            break
        print(f"i ={i}, j={j}")

>>> 
i =0, j=0
break,
i =1, j=0
i =1, j=1
break,break,

continue:繰り返しをスキップ

numbers = [0.0, 1, 3, 5, 7,"q", 12] 
sum = 0
for number in numbers :
    # numbersが数値ではない時にbreak
    if not isinstance(number, (int, float)) :
        print(number, "数値ではありません")
        continue
    sum += number
    print("number:",number, "/", "sum:",sum)

>>> 
number: 0.0 / sum: 0.0
number: 1 / sum: 1.0
number: 3 / sum: 4.0
number: 5 / sum: 9.0
number: 7 / sum: 16.0
q 数値ではありません
number: 12 / sum: 28.0
for i in range(2) :
    for j in range(3) :
        if i < j :
            print("break," * j)
            continue
        print(f"i ={i}, j={j}")

>>> 
i =0, j=0
break,
break,break,
i =1, j=0
i =1, j=1
break,break,

for in ~ else:繰り返した後で実行

for 変数 in オブジェクト:
 オブジェクトの値を全て取り出すまで実行内容
else:
 オブジェクトの値を全て取り出せた時の実行内容

numbers = [0.0, 1, 3, 5, 7,"q", 12] 
sum = 0
for number in numbers :
    # numbersが数値ではない時にbreak
    if not isinstance(number, (int, float)) :
        print(number, "数値ではありません")
        break
    sum += number
else:
    print("number:",number, "/", "sum:",sum)

>>> q 数値ではありません

try文:例外処理

例外処理:実行時に発生したエラーにより、プログラムが止まらないように対応するコード

try ~ except

try:
 例外が発生する可能性がある処理
except:
 例外が発生した場合の処理

while True :
    num =  input("8×6=?(qキーで終了)")
    if num == "q":
        print("わかりませんでした")
        break
    # 入力値を整数に変換できない場合例外処理
    try :
        result = int(num)
        print("回答:", result)
    except :
        print("数値以外が入力されました。数値を入力してください。")

>>> 
8×6=?(qキーで終了)しじゅうはち
数値以外が入力されました。数値を入力してください。
8×6=?(qキーで終了)48
回答: 48
8×6=?(qキーで終了)q
わかりませんでした

try ~ except ~ finally

try:
 例外が発生する可能性がある処理
except:
 例外が発生した場合の処理
finally:
 tryの処理を抜ける前に実行する処理

num = 0
try :
    value = 100 / num
    print(value)
except :
    print("Error")
finally :
    print("終了")

>>> 
Error
終了

try:
 例外が発生する可能性がある処理
except (例外1, 例外2):
 例外1、2が発生した場合の処理
except (例外3, 例外4):
 例外3、4が発生した場合の処理
except:
 例外1、2、3、4以外が発生した場合の処理

total = 12000
while True :
    num =  input("12000円を何人で割り勘しますか?(qキーで終了)")
    if num == "q":
        print("終了")
        break
       
    # 例外処理の振り分け
    try :
        price = round(total / int(num))
        if price < 0 :
            #マイナス値は無視
            continue
        print("1人当たりの金額", price)
    except ValueError :
        print("数値を入力してください。")
    except ZeroDivisionError :
        print("0以外の数値を入力してください。")

>>> 
12000円を何人で割り勘しますか?(qキーで終了)4
1人当たりの金額 3000
12000円を何人で割り勘しますか?(qキーで終了)よん
数値を入力してください。
12000円を何人で割り勘しますか?(qキーで終了)0
0以外の数値を入力してください。
12000円を何人で割り勘しますか?(qキーで終了)q
終了

try ~ except as

try:
 実行内容
except 例外1 as 名前1:
 例外1が発生した場合の処理
except 例外2 as 名前2:
 例外2が発生した場合の処理

total = 12000
while True :
    num =  input("12000円を何人で割り勘しますか?(qキーで終了)")
    if num == "q":
        print("終了")
        break
    # 例外を処理する
    try :
        price = round(total / int(num))
    except Exception as error :
        print("Error:",error)
    else :
        if price < 0 :
            # マイナス値は無視
            continue
        print("1人当たりの金額", price,"円")

>>> 
12000円を何人で割り勘しますか?(qキーで終了)4
1人当たりの金額 3000 円
12000円を何人で割り勘しますか?(qキーで終了)よん
Error: invalid literal for int() with base 10: 'よん'
12000円を何人で割り勘しますか?(qキーで終了)0
Error: division by zero
12000円を何人で割り勘しますか?(qキーで終了)q
終了

タイトルとURLをコピーしました