40のおっさんのPython学習記録

20年以上前、学部の必修のC言語が全く理解できずに同級生に放り投げ、その後コーディングから遠ざかったガチ文系のおっさんが、ふと思い立ってPythonに挑戦しています。

新たな気付き集(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("次行ってみよう。")