新たな気付き集(Chapter 5)
条件分岐、繰り返し、例外処理のチャプターです。読み進めるほど、この本いいわあと思います。章の並びの唐突さとかがないし、関数は引数をどう入れるべきか定義っぽく示してくれるし。最初の2冊なんかいらんかったんや!時間のムダやったんや!って感じです。さて、以下備忘録です。
- ifにifをネストするよりもif(条件式A)and(条件式B)and(条件式C)としたほうがシンプルでよい。
- 不等式を繋げる場合は、if(a=>-5)and(a<=8)もいいけど、if -5<= a <= 8: みたいな書式も可能。Excelではできないけど。
- Falseと同じとみなされる戻り値にNone, 0, 0.0, "", (), [], {}等がある。戻り値がTrueかFalseかで条件分岐をさせるコードは以下のように書ける。つまり戻り値がTrueだとifに続く式が実行される。
name=input("名前を入れて:") if not name: #上を未入力で返すとnot nameがTrueになるので次の式が実行 name="匿名" print(name)
from random import randint num=randint(0,100) if num%2: #奇数で余りが1だとTrueになるので、次が実行される。 result="奇数" else: #偶数で余りが0だとFalseになるので、上が実行されず次が実行される。 result="偶数" print(num,result)
- while 条件式でループを作るが、while Trueで無限ループを作れる。普通はbreakを入れてループから抜け出せるようにする。
from random import randint while True: a = randint(1,13) b = randint(1,13) if a+b==21: break #合計21になったらループを出る print(a,b)
- while 条件式の中にcontinueを入れると、continue以下がすっ飛ばされてループが繰り返される。
from random import randint numbers=[] #空のリストを作成 #10個の違う正の数字の入ったリストを作成 while len(numbers)<=10: n=randint(-10,100) if n<0: print("マイナスの数字が出たので中断されました。") break #マイナスの数字が出たら中断。elseブロックすら実行されない if n in numbers: continue #同じ数字がリストにあったら次を実行せずやり直し numbers.append(n) else: print(numbers)
- while〜else文の場合、whileの中にbreakがあってそれが実行された場合はelseの中は実行されない。elseはwhileをFalseで抜けた場合のみ実行される。
from random import randint numbers=[] #空のリストを作成 #10個の違う正の数字の入ったリストを作成 while len(numbers)<=10: n=randint(-10,100) if n<0: print("マイナスの数字が出たので中断されました。") break #マイナスの数字が出たら中断。elseブロックすら実行されない if n in numbers: continue #同じ数字がリストにあったら次を実行せずやり直し numbers.append(n) else: print(numbers)
- for文もbreakで中断するとelse以降は実行されない。
- エラー発生等例外が発生する可能性のある処理を行う場合は、tryで試し、エラーがだめならexceptをやる。エラーが出ない場合にelseの塊が実行され、finallyはエラーが出ようが出まいが実行される。
sum=300000000 while True: num=input(f"銀行強盗で{sum:,}円をゲットしましたが何人で山分けしますか?数字だけを入力してください。(qで終了):") if num=='q'or num=='q': print("終了しました。") break try: #数字を入力された場合に実行 price=sum/int(num) except ValueError: print("qか数字だけを入れろつったよな?幼稚園児かてめえ") except ZeroDivisionError: print("ゼロで割り切れると思うのか?中学校からやり直せクソ野郎") except Exception as error: #上で数字以外を入れられてエラーが出た場合実行 print(error,"ってわけわかんねえエラー出たぞボケが") else: if price<0: print("マイナスでどう分けようっての?馬鹿なの?死ぬの?") continue else: print(f"一人あたりの山分け額は{price:,.0f}円です。") finally: #エラーが出ようが数字以外が入力されようが実行 print("次行ってみよう。")