見出し画像

【Python始めました】「ゼロからやさしく始めるPython入門」を進めてみて

42tokyoでC言語を学び、競プロ用にC++を学んだが、自分の一番興味を持っている機械学習・データサイエンス分野は圧倒的にPythonがシェアを誇っています。

そこで、初心者向けのPython本を買ったのですが、これが半日くらいで終わるボリュームなのにも関わらず、めちゃくちゃわかりやすくて満足度も高かったので紹介します!

しかもゲーム制作や機械学習のさわりにも触れるので、モチベーションも保ちやすい。久しぶりに充実した半日を過ごせました。

https://amzn.asia/d/2FaUzT9


ch.1プログラミングってなんだろう?

まずはPythonをダウンロード。

コンパイル言語 vs スクリプト言語

42tokyoのPiscineでお世話になったC言語は毎回コンパイルするのが当たり前だったので、コンパイルが必要でないと知って衝撃でした。

プログラムを実行前にコンピュータが認識できる機械語に変換してから実行するCのような言語を"コンパイル言語"、それとは対照的にPythonのように1行ずつ処理していくコンパイル不要な言語を"スクリプト言語"というらしい。

コンパイル工程が不要なだけでも、Pythonが初心者にとっつきやすい言語と評される理由がわかる。

ch.2 プログラミングを始めてみよう

ここからはダウンロードしたPythonフォルダにデフォルトで同梱されている"IDLE"という対話型シェルでプログラムを実行していく。

この章で学ぶことは、

  • 基本的な入出力

  • 四則演算

  • データ型の変換方法

  • エスケープシーケンス

などである。C言語で一通り学んだことかつ、Pythonの方がより直感的に記述できるのですんなり理解できた。

一つの言語を学ぶと容易く転用できることを肌で感じた。

全ての変数に対して型宣言しないといけないC言語と違い、型宣言なしで変数に値を代入して使ってOKなことにまたまた衝撃。Pythonの方が果てしなく簡単に簡潔に記述できるけれど、C言語からプログラムの勉強を始めて良かったと感じました。C言語から学び始めたからこそ、よりプログラムの本質が理解できている気がします。

以下は作成した自己紹介を表示するプログラム

# 情報を入力してください
name =input('名前は?')
age = input('年齢は?')
hobby = input('趣味は')
nickname = input('ニックネームは?')
# 自己紹介文を表示
s1 = "初めまして" + name + "と言います\n"
s2 = "年齢は" + age + "で、趣味は" + hobby + "です。\n"
s3 = "ぜひ、" + nickname + "と呼んでください\n"
s4 = "みんなと仲良くなりたいです!"
print("-------")
print(s1 + s2 + s3 + s4)

ch.3 制御構文を使ってみよう

この章では以下の制御構文にまつわる文法を学んでいく。

  • 条件分岐(if, elif, else)

  • 繰り返し(for, whileなど)

  • 比較式(a == b, a != b, a < bなど)

  • 論理演算子(and, or)

個人的に驚いたのは、制御構文の条件式の末尾のコロン以降は括弧が必要ないことと、論理演算子が記号でないことだった。

インデントだけで判断してくれるのは文が長くならず、かつカッコ忘れも防げて優秀だし、論理演算子も記号(&, |など)ではなく単語なので読みやすく条件式を記述できて感心した。

ここもC言語で学んでいた内容だったので、すんなり進めた。

以下はカメの競争を画面上で行うプログラム。実際の動きが可愛い。

import random
import time

a = 0
b = 0
goal = 20

user = input("aとbのどちらのカメが勝つと思うか?")

print("競争開始!")
while(a < goal) and (b < goal):
    print("-----")
    a = a + random.randint(1,6)
    b = b + random.randint(1,6)
    print("a:" + ">" * a + "@")
    print("b:" + ">" * b + "@")
    time.sleep(1)

if a == b:
   winner = "同時"
elif a > b:
    winner = "a"
else:
    winner = "b"


if winner == user:
     print("当たり!")
else:
    print("ハズレ")


1秒おきに表示されるカメたちの軌跡(かわいい)

ch.4 リストと辞書型を使ってみよう

ここからもC言語にあるのかもしれないが、Piscineでは触れることができなかったので、ここからが本番だった。

リストはC言語の配列で触れていた内容とほとんど一緒だったが、辞書型が初対面だった。

KeyとValueをセットで管理する辞書型にはsortをはじめ色々な関数が用意されており、Pythonがデータサイエンス方向に多用される理由が垣間見えた気がした。

以下は辞書型を利用して作成したクイズ。

quiz_list = [
    #[ 問題, 選択肢1,選択肢2, 選択肢3, 答え]
    ["スターバックス1号店の場所は?", "シアトル", "ニューヨーク", "ロサンゼルス", 1 ],
    ["世界遺産に登録されていないのは?", "屋久島", "宮島", "松島", 3],
    ["リニアモーターカー(大阪-東京)が通過しない予定なのは?", "京都府", "静岡県", "岐阜県", 1],
    ["将棋にも全く動きがおなじコマがあるのは?", "クイーン", "ナイト", "ビショップ", 3]
]

import random
random.shuffle(quiz_list)

for quiz in quiz_list:
    print("[問題]")
    print(quiz[0])
    for i in range(3):
        no = i + 1
        print(str(no) + ": " + quiz[no])
    user = int(input(" 答えは何番?:"))
    ans = quiz[4]
    if user == ans:
        print("\n>>>>>>> 正解です〜!!")
    else:
        print("\n>>>>>>> ハズレ、、答えは:" + quiz[ans])
    print("\n---------------")

ch.5 関数を使ってみよう

これまで一つのまとまりとしてプログラムを記述していたが、何度も行う処理を関数として切り出して記述する方法を学んだ。これもC言語で学んでいた内容であったので、大枠はすんなり理解できた。

学びだったのは関数をモジュール化してimportで呼び出し、asで名前を決めて好きな関数名として利用できる状態にできることだった。C言語でいうライブラリみたいなものだろうか。

ここまでのchapterもなのだが、ただ文法を習っているだけではなく、どういった応用があるかを作りながら学んでいけるので楽しみながら進む事ができる。

この章の実装は

  • 次のオリンピックまであと何日か出力するプログラム

  • 水族館の入場料を計算するプログラム

  • 今日の天気をwebから取得して表示するプログラム

  • apiを使用して郵便番号から住所を表示するプログラム

など、非常に身近であり実際に欲しいかもな、と思えるサービスが多かった。

以下は東京オリンピックまでの日付を表示するプログラムである。(実際に手を動かして記述したPythonのコードはGithubにアップしている。ページ最下部にGithubのリンクあり)

import datetime

# 特定の日付から東京オリンピックまでの日付を調べる関数

def calc_days(y, m, d) :
    olympic = datetime.datetime(2020, 7, 24).timestamp()
    target = datetime.datetime(y, m, d).timestamp()
    perday = 24 * 60 * 60
    days = (olympic - target) // perday
    s = "{0}/{1}/{2}から{3}日後".format(y, m, d, int(days))
    print (s)

# 特定の日から何日後か調べる
calc_days(2017,12,1)
calc_days(2018,3,1)

# 今日から何日?
t = datetime.date.today()
calc_days(t.year, t.month, t.day)

ch.6 ゲームを作ってみよう

これまでは画面上に文字を出力するだけのプログラムでしたが、迷路ゲームやアクションゲームを作成していきました。

思ったより簡単にゲームが記述できることに驚きながら、もっと色々なゲームを作って見たくなりました。

Pythonにはゲーム作りのイメージがあまりなかったので、ここまで簡単にPythonでゲームが作れるのは学びでした。

ch.7 機械学習に挑戦してみよう

この章では敷居が高いと思われている機械学習に触れました。入門書でいきなり機械学習まで辿り着くケースは少ないと思ったので貴重な本かもしれません。

Anacondaをダウンロードし、Jupyter NotebookでNumpyやmatplotlibにも少しだけ手を伸ばす豪華カリキュラム。笑

そして機械学習の登竜門とも言われる""アヤメの分類" に挑戦します。

機械学習の基本であるデータの収集・整形から学習モデルの構築、評価まで一気通貫で体感させてもらいました。

そして教師あり学習の分類だけでなく、教師なし学習の代表であるクラスタリングも画像認識で体験する事ができました。ここでは手書きの数字を認識することに挑戦しました。

まとめ

ガチの"完全初心者"にも優しい本でした!

初歩の文法から機械学習のさわりまで、数時間で楽しみながら学べる内容でした。

実際に手を動かして書いたコードはGithubにアップしています。

おすすめされた以下の書籍を購入したので、次はこの本でデータサイエンスの基礎を学びながらKaggleの戦闘力を高めていきたいと思います。Atcoderで使用するC++だけでなく、PythonもKaggleなどに出場していきながら実装力を高めていきたいですね。

それでは良きコードライフを〜!

読んでいただきありがとうございます! ハートをポチっとしていただけると執筆の励みになります✌️