『退屈なことはPythonにやらせよう』その1 (1~3章)
今回から学習ログを開始していきたいと思います!
今回は1~3章までを一挙にやっていきます。
『退屈なことはPythonにやらせよう』ですが、実は英語版のPDFが落ちてたりします。リンクはこちら。
なんか無料で全部読めちゃうみたいなのですが、説明が全部英語なのとブラウザで読むのがけっこう大変だったりもします。
英語がめっちゃ得意な人とか、さらっと内容を確認したいだけならあれですが、本で買った方が捗るのかなと個人的に思っています。
ということで本日から『退屈なことはPythonのやらせよう』を始めていきます!
1章
1章は「Python入門」となっています。
インタラクティブシェルにコードを書いて実行するところから始まり、型の説明、変数の説明が入ります。
print関数とinput関数の説明もここで入ります。出てきた関数は以下のリストの通り。
- input
- len
- str, int, float
学習の成果として、学習中に書いたコードを載せておきます。
#このプログラムは挨拶を表示して名前と年齢を尋ねる
print("Hello World!!")
print("What is your name?")
my_name = input()
print("It is good to meet you " + my_name)
print("The length of your name is: ")
print(len(my_name))
print("What is your age?")
my_age = input()
print("You will be " + str(int(my_age) + 1) + " in a year.")
この辺まではつっかえるところもなく、サクサクです。
2章
2章はフロー制御の章です。
演算子の話や、フロー制御文について触れられています。また、モジュールのインポートについてもここで学習しています。
比較演算子、ブール演算子をまとめておくと
演算子 | 意味 |
== | 等しい |
!= | 等しくない |
< | より小さい |
> | より大きい |
<= | 以下 |
>= | 以上 |
演算子 | 意味 |
and | 「かつ」 |
or | 「または」 |
not | 「~でない」 |
だいたい数学Aとかでみたことあるようなメンバーですね。
フロー制御には
- if文
- elif文
- else文
- whileループ文
- break文
- continue文
が登場しました。
if文で条件分岐を開始、elifでさらにふるいを増やして、elseで最後まで落ちてきたやつを処理、というようなイメージです。
whileを用いたループ文では、無限ループに陥る危険があること、breakとcontinueの使い方を学びました。
無限ループに入ってしまったら、「Ctrl-C」か、シェルをリスタートすることで抜け出すことができます。
学習の成果として、演習問題で書いたコードを貼っておきます。
spam = 3
if spam == 1:
print("hello")
elif spam == 2:
print("Howdy!")
else:
print("Greetings!")
これはspamが1なら”Hello”、2なら”Howdy”、それ以外なら”Greetings!”を出力するプログラムです。if文、elif文、そしてelse文を使う肩慣らし的な演習ですね。
#for
for i in range(0,10,1):
print(i+1)
print("while roop will start")
#while
i=0
while i < 10:
print(i+1)
i += 1
課題では、while文を使って1から10までの数字を順番に出力するプログラムを書くという指示でした。
なんとなく使いなれていたので、先にfor文も試してみました。
3章
3章は関数の章です。
Pythonではdef文を用いて関数を作ることが出来ます。
関数を使うと、何回も行うような処理をまとめることができ、コード自体をシンプルに記述することができます。
また、何か問題が発生したときにも関数の中をひとつだけ修正すれば良くなります。
この章では、関数の作り方、引数の説明、ローカルスコープとグローバルスコープについて学習しました。
また、例外処理についてもふれられています。
短いプログラムの例として、簡単な数当てゲームのコードを書きました。
#数当てゲーム
import random
secret_number = random.randint(1, 20)
print("1から20までの数を当ててください")
#6回聞く
for guess_taken in range(1,7):
print("数を入力してください。")
guess = int(input())
if guess < secret_number:
print("小さいです。")
elif guess > secret_number:
print("大きいです。")
else:
break #当たり
if guess == secret_number:
print("当たり! " + str(guess_taken) + "回で当たりました!")
else:
print("残念。正解は " + str(secret_number) + "でした。")
実行すると、内部的に数が決定されます。そしてプレイヤーはそれを推測して入力します。
合ってれば「当たり!」、間違っていれば、答えの数が入力した数より大きいか小さいかを教えてくれます。
(意外と当たらなくて、思ったより難しい。)
#collatz関数
def collatz(number):
global num
if number % 2 ==0:
num = number / 2
else:
num = 3 * number +1
return num
print("整数を入力してください。")
number = int(input())
print(collatz(number))
while num != 1:
collatz(num)
print(int(num))
3章から、演習プロジェクトなるものが実装されました。コラッツ数列というものを再現する関数を作成する課題です。
ユーザーから整数を一つ入力してもらい、コラッツ数列に従って連続で作成したコラッツ関数を走らせるというものになっています。
#collatz関数ver.2
def collatz(number):
global num
if number % 2 ==0:
num = number / 2
else:
num = 3 * number +1
return num
print("整数を入力してください。")
while True:
try:
number = int(input())
break
except ValueError:
print("入力値のエラーです。整数の値を入力してください。")
continue
print(collatz(number))
while num != 1:
collatz(num)
print(int(num))
演習プロジェクトの2です。ユーザーが整数以外の値を入力したとき(“neko”などのstrとか)にエラーを返して、もう一度入力しなおしてもらうように調整したコードになります。breakとcontinueを利用することで、整数の値を入力するまで、ひいては1を見せつけるまでユーザーを離さない仕様になりました。
「演習問題」と「演習プロジェクト」は章が分かれていて、「演習問題」の方には模範解答があります。
しかし、「演習プロジェクト」のほうにはそういったものがありません。
まだ全然自力で欲しい出力まで辿りつけていますが、「今後難易度が上がったらやばいのでは?」と震えています。
今後も精進してまいります。
感想
ここまでは割とサクサク進んでいます。
BGM選びに苦心したあげく、映画とかアニメとかを見はじめてしまったりしない限りは大丈夫です。
「銀魂」、「邪心ちゃんドロップキック」、「日常」あたりにはかなり時間を溶かされてしまいましたが、私は元気です。
上白石萌音さんの「夜明けをくちずさめたら」(Youtubeへのリンク)を聴きながら書いたらすごく捗りました。
声がすごく素敵ですし、歌詞も曲調もドストライクです。5/11に配信スタートみたいなので、iTunesで買っちゃおうかな…
追記
Al Sweigartさん、『Invent Your Own Computer Games with Python (4th ed.)』もWeb上で公開してました。太っ腹すぎる…
次の記事はこちら