技術はメシのタネ

底辺プログラマで技術の向上を目指しているけれどやりたい事が無くて困っている

「退屈なことはPythonにやらせよう」を読む(随時更新)

本書を読む理由

曲がりなりにもITスキルを有し、ITエンジニアを名乗り、日々プログラミングしている人間が、何故に本書を読むのか。
それはまあ、ブログタイトルの通りである。
「底辺プログラマで技術の向上を目指しているけれどやりたい事が無くて困っている」。
どちらかというと、pythonそのものではなく、自動化できる処理にどのようなものがあるのかが知りたくて、本書を手に取った次第である。


python力……たったの5か……ゴミめ……

でぇじょぶだ、Cなら30くらいはある!
(読者たる私のプログラミング能力を問われた気がした)
python自体に関しては、多少入門書や入門サイトを眺めて、文法をコンソール上で確認した程度。
知らないことの方が多い。


訳者まえがき

なんか意識高い系なこと書いてあんな……。

なん・・・だと・・・?
本書で紹介しているモジュールを使って、Word、Excelからデータを取り出す……?
そんなことが!?
(先ほどのゆで汁!?でお馴染みの全部捨てた女の子の画像を思い出して頂きたい)

なお、本書には、クラスや、ジェネレータ、リスト内包表記といったPythonの高度な機能の説明はありません。

この辺のことについてはこれらで確認しようと思っている。

基礎Python 基礎シリーズ

基礎Python 基礎シリーズ


まえがき

本書を読むと、次のような作業を自動化できるらしい。

  • 何千個ものファイルを移動し、名前を変え、フォルダに分ける。
    →.cmdとか.shでバッチ処理くらいは作れると思う。
  • オンラインのフォーム(申し込み画面)を、キーボードを使わずに入力する。
    →ちょろめを始めとして、最近のwebブラウザならみんなやってくれるんじゃないの?
  • Webサイトが更新されたら、自動的にファイルをダウンロードしたりテキストをコピーする。
    RSSを受け取るところまでしか想像できない。これは有益そう。
  • Excelスプレッドシートを更新・整形する
    →今はサクラエディタ正規表現で変換したりしてるので、これは助かるかも。
  • 電子メールをチェックして、事前に用意しておいた返事を送信する
    →なんか、インシデントが怖ぇな……。

推奨のコーディングスタイルに反することがありますが(例えば、グローバル変数の使用)、その代わりコードが簡単で習得しやすくなっています。

ふーん、推奨のコーディングスタイルとかあるのか。
あとで調べてみよう。

pythonのプログラミング環境については、`Visual Studio Code`で準備した。
ついでなので、`pylint`も導入してみた。

あ、本書のすべてのプログラムは`python3`で動作するように書かれているそうだ。


第Ⅰ部Pythonプログラミングの基礎

1章Python入門

  • 1.1 式をインタラクティブシェルに入力する
  • 1.2 整数、浮動小数点数、文字列型
  • 1.3 文字列の連結と複製
  • 1.4 変数に値を格納する
    • 1.4.1 代入文
    • 1.4.2 変数名
      Pythonの公式コーディングスタイルPEP8
      変数名はアンダースコアでつなぐスタイルが望ましいのか。

この辺のことは [これ](Dive Into Python 3 日本語版) を読んだ時に一通り確認した。

  • 1.5 最初のプログラム

本書記載の最初のプログラム、`hello.py`を`pylint`にかけてみると、スコアは4.44 / 10であった。
原文ママをここに転載するのは気が引けるので、後で`pylint`スコアを高めたものを掲載。

hello.py

"""このプログラムは挨拶を表示して名前と年齢を尋ねる"""
# -*- coding: utf-8 -*-

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.') # 来年の年齢を表示

あまり修正する意味を感じないな……。

  • 1.6 プログラムを分析する
    • 1.6.1 コメント
      pythonの行末までのコメントは#
    • 1.6.2 print()関数
    • 1.6.3 input()関数
      →C言語で同じようなことをするのに比べると、随分と簡単に実現できる。
      PEP8では、const変数は大文字にするのが推奨の模様。

    • 1.6.4 ユーザー名を表示する

      式は常にひとつの値に評価されるのでしたね。

実は、このinput()関数、もっと便利に使用できる。

print('Hello world!')  # ❷
# print('What is your name?') # 名前を尋ねる

MY_NAME = input('What is your name? : ')  # ❸

input()関数の引数に、入力を促す(ためだけに使用するわけじゃないけど)ための文字列を取ることが出来るのだ。
便利~。

  • 1.6 プログラムを分析する
    • 1.6.5 len()関数
    • 1.6.6 str(), int(), float()関数
      →len()もそうだが、そもそも、こういうチェックの甘そうなソースコードを見ると意地悪したくなるのがプログラマーの性だ。
      ‘What is your name?'と聞かれたところで、意地悪して18などの整数を入力してみる。
      すると、"It is good to meet you, 18"と平然と返してきた。
      ……当然である。
      なぜって、input()関数はキーボードから入力されたものを"文字列"にして返す関数だからだ。
      整数値、浮動小数点数値を入力しても、"数値"→数"字"→文字列になってしまうのである。
      クソっ、よく出来てやがるな……!!
      いわゆるキャスト系の関数にも特に目新しいことは無いかな。
      なお、"What is your age?“と訊かれた際に"aaaa"などと入力すると、キャストがうまくできずにValueErrorとなる。




(以下、随時追加更新していく予定。)




(余談。本文中に下記への言及がまだ出てきてないけど、これからなのかな?)

github.com