派遣で働くエンジニアのスキルアップを応援するサイト

PRODUCED BY RECRUIT

Pythonの自習でつまずいたら?

Pythonを一人で学ぶ際につまずきやすいこと、それらを解決するための方法を具体的にご紹介。スキルアップにつなげるために知っておきたいちょっとしたコツです。

  1. Pythonは初心者にやさしい言語?
  2. Pythonの自習で大事なことは?
  3. Pythonの自習でつまずいたら?

自習につまずいてしまったら

■コミュニティを活用する

今後に役立てようと独学でプログラミングを学んでいたり、趣味でプログラミングに取り組んでいたりするのであれば、わからないことがあっても質問する相手がいません。

このような場合に便利なのが、プログラミングに関するコミュニティや勉強会です。

SlackやDiscordなどのツールを使ったコミュニティでは、チャット形式で質問や情報共有が活発に行われており、無料で参加できるものが多くあります。

たとえば、PythonであればDiscord上に「Python.jp Discordサーバー」があります。
https://www.python.jp/discord/index.html

困ったときに質問するとコミュニティ内の誰かが答えてくれるかもしれません。

▼プログラミングなどのオンラインコミュニティの例

■エラーが出たら聞いて解決!検索して解決!

プログラミングで難しいのはエラーが出たときの対応です。

本に書かれている通りに入力しているつもりでも、プログラミングではたった1文字間違えているだけでエラーになります。半角と全角を間違えた、大文字と小文字を間違えた、スペースの数が違う、などちょっとした間違いで、正しく動作しなくなるのです。

このとき、エラーが出た時点で諦めるのではなく、そのエラーの内容をじっくり確認することが大切です。

多くの場合、エラーメッセージは英語で書かれていますが、その冒頭部分に書かれているメッセージを確認し、日本語に訳せば原因がわかることが多いものです。

原因がわからない場合も、インターネットでそのメッセージそのものを検索すると、その原因が判明することは珍しくありません。場合によっては、エラー番号などで検索するだけで、その原因がわかることもあります。

たとえば、次のようなソースコードを入力して実行すると、次のようなエラーメッセージが表示されます。

エラーのあるソースコード

for i in range(1, 5)
    if i % 2 == 0:
        print(i)

エラーメッセージ

  File "<ipython-input-1-6332177ceff2>", line 1
    for i in range(1, 5)
                        ^
SyntaxError: expected ':'

この「SyntaxError: expected ':'」というエラーメッセージの「SyntaxError」という部分から、文法的に間違いがあることがわかります。また、後半部分を訳すと、「':'が期待される」ということなので、「:」が抜けていることがわかります。

また、次のようなソースコードを入力して実行すると、次のようなエラーメッセージが表示されます。

エラーのあるソースコード

for i in range(1, 5):
    if i % 2 = 0:
        print(i)

エラーメッセージ

  File "<ipython-input-2-78b1fe83a15d>", line 2
    if i % 2 = 0:
       ^
SyntaxError: cannot assign to expression here. Maybe you meant '==' instead of '='?

これも文法エラーで、エラーメッセージの前半部分を訳すと、式(expression)に割り当て(代入)できない(cannot assign)ということがわかります。そして、後半部分で、「=」の代わりに「==」を使おうとしているのではないか、ということがわかります。つまり、ifの条件部分で「==」とすべきところが「=」のように「=」がひとつ抜けていると気づきます。

「英語が苦手で、エラーメッセージもよくわからない…」

もし英語が苦手であっても、このエラーメッセージ全体を検索すると、多くのWebサイトが見つかります。エラーメッセージの意味がわからなくても、検索することでその原因に気づける可能性があるのです。

最近では、ChatGPTなどのAIを使う方法もあります。うまく動作しなかった場合は、そのソースコードと合わせて「どこが間違えているのか教えてください」というメッセージをChatGPTなどに送信すると、間違っている場所を指摘してくれることもあります。

▼プログラマならではの「ChatGPT」の使い方
https://www.r-staffing.co.jp/engineer/entry/20230224_1

さいごに。ちょっとした練習問題を解いてみませんか

ここまで、Pythonの概要と勉強方法を紹介してきましたので、ぜひ実際にPythonの本などを読んで、さまざまなプログラムを作ってみていただければと思います。

さいごに練習問題として、ちょっとしたプログラムの例題を出題してみたいと思います。

ある程度のプログラミング経験がある方は力試しに。まったくプログラミング経験がない方は、プログラムを作る前にどんなことを学べばこのプログラムを作れるのかを考えていただければと思います。

【プログラムの内容】
2つの日付を数字8桁で入力し、その間の日数を求める関数を作成してください
【例】

この問題では、細かな仕様は定めていません。

実際に動作させるために、Google Colaboratoryで実行するように標準入力と標準出力を使っても構いませんし、Webアプリとして作成して入力フォームから2つの日付を入力しても構いません。

また、どのようなチェックを入れるのか、ぜひ仕様を考えてみてください。

たとえば、入力された日付が8桁でなかったらどうするか、入力1よりも前の日付が入力2に指定されたらどうするか、入力2が指定されなかったらどうするか、など考えるべきことはたくさんあります。

このように「想定外の入力」を考えるのもプログラマの仕事です。

そして、同じ結果を得られるものでも、さまざまな実装が考えられます。日付を処理するライブラリを使うのもひとつの方法ですし、独自に実装する方法も考えられます。

何もチェックしない場合の解答例

from datetime import datetime

def calculate_days(start_date, end_date):
    date_format = '%Y%m%d'
    start = datetime.strptime(start_date, date_format)
    end = datetime.strptime(end_date, date_format)
    delta = end - start
    return delta.days

# 確認
print(calculate_days('20230801', '20230802'))  # 出力: 1
print(calculate_days('20230801', '20230901'))  # 出力: 31
print(calculate_days('19641010', '20210723'))  # 出力: 20740

■まとめ

この連載では、現在注目されているPythonについて、どのように学んでいけばよいのか、その工夫を紹介しました。Pythonだけでなく、プログラミングを学びたい人に共通して役立つ内容だと思いますので、ぜひ参考にしていただけると嬉しいです。

  1. Pythonは初心者にやさしい言語?
  2. Pythonの自習で大事なことは?
  3. Pythonの自習でつまずいたら?
【筆者】増井 敏克さん
増井技術士事務所代表。技術士(情報工学部門)。情報処理技術者試験にも多数合格。ビジネス数学検定1級。「ビジネス」×「数学」×「IT」を組み合わせ、コンピュータを「正しく」「効率よく」使うためのスキルアップ支援や、各種ソフトウェアの開発、データ分析などを行う。著書に『Pythonではじめるアルゴリズム入門』『図解まるわかり プログラミングのしくみ』『「技術書」の読書術 達人が教える選び方・読み方・情報発信&共有のコツとテクニック』(以上、翔泳社)。最新刊は『1週間でシステム開発の基礎が学べる本』(インプレス)。

※本記事に記載されている会社名、製品名はそれぞれ各社の商標および登録商標です。

リクルートスタッフィング