Python入門 AtCoder Programming Guide for beginners (APG4bPython)
Can Participate: All Rated Range: - Penalty: None
プログラミング入門教材 Python 入門 AtCoder Programming Guide for beginners (以降:APG4bPython) へようこそ。
C++ 入門 APG4b はこちら
APG4bPythonとは
Pythonで競技プログラミングを始める人のための入門教材です。
対象読者
APG4bPython は、プログラミングを一から学びながら競技プログラミングを始めたい方を対象としています。また、初歩的な内容から多少発展的な内容まで扱うため、既に少しプログラミングに触れたことがある方にとっても学びがある内容となっています。
APG4bPython の特徴
APG4bPython の大きな特徴は、プログラムの説明に練習問題がついていること、そして練習問題の自動採点システムがあることです。
プログラミングの初学者のよくあるパターンとして、「入門書を読みながらそこに書いてあるプログラムをなんとなく写していたが、よくわからなくなってやめてしまう」というものがあります。
APG4bPython でプログラミングの学習を行えばその心配はありません。説明を読んだあと、練習問題を自分で考えてプログラムを書き、その正しさを採点システムで確認することで、着実にプログラムを書けるようになっていきます。
Python版APG4bの取り組み方
AtCoder のアカウントを作成した後、このページの「参加登録」ボタンを押してください。
参加登録ができたら、下にある目次の「1.00. はじめに」から読み進めて行きましょう。
説明をしているページの一番下には練習問題がついています。説明を読み終えたら必ず練習問題を解きましょう。
目次
APG4bPython はプログラミング言語の違いを踏まえて C++ 版 APG4b を再編集し執筆しています。今回は第 1 章の公開になります。(C++ 版 APG4b と同様に第 4 章まで作成するかは未定です。)
具体的な目次は以下のとおりです。
第 1 章 基本文法
1.00.はじめに
1.01.出力とコメント | EX1
1.02.プログラムの書き方とエラー | EX2
1.03.四則演算と優先順位 | EX3
1.04.変数と型 | EX4
1.05.入力 | EX5
1.06.if文・比較演算子・論理演算子 | EX6
1.07.論理式の値とbool型 | EX7
1.08.while文 | EX8
1.09.for文・break・continue | EX9
1.10.リスト | EX10
1.11.文字列 | EX11
1.12.組み込み関数 | EX12
1.13.関数 | EX13
Python の特徴
AtCoder では、多くの言語がサポートされているので、あなたが好きな言語を使って参加することができます。ここでは、主に競技プログラミングに使うという点から Python の特徴を挙げます。
シンプルで直感的な文法
Python は、文法が直感的でコードが書きやすく可読性が高いと言われていて、初心者にも人気な理由のひとつとなっています。競技プログラミングでは実装のスピードも重要になるので、コードが書きやすいことは初心者に限らず、中・上級者にとっても有利な点と言えるでしょう。
もちろん、直感的かどうかは人によって変わる可能性があります。
実行速度
Python はインタプリタ言語であり、 C++ のようなコンパイル言語と比べるとどうしても実行速度が遅くなる傾向があります。
直近の AtCoder のコンテストでは、超上級者向けの問題の一部を除いて、コンテストで出題される問題のほとんどは Python (後述の PyPy も含む)でも実行時間制限内に無理なく通すことができます。このため、解法は合ってるのに Python だから通せないということはほとんどありません。
もちろん、想定解よりも遅い解法を使う場合や Python が得意でない書き方をする場合などでは TLE (実行時間制限超過)で引っかかる可能性はあります。本記事では、 Python を使う場合に TLE に引っかからないために気を付ける点についてもなるべく触れていきます(主に 2 章以降になる予定です)。
動的型付け
Python は動的型付けを採用しているため、変数の型を明示的に宣言する必要がありません。これによってコードが簡潔になり、また柔軟性が高まるというメリットがあります。実装がしやすくなるという点は競技プログラミングでは有利に働きます。
一方で、型が明確でないことにより、エラーが起こりやすい、デバッグがしづらいというデメリットもあります。特に長いコードや複雑なコードを書く場合にはこの影響が出やすいです。競技プログラミングのコンテストは通常、個人参加で数時間程度なので、長期間・多人数で行う大規模プロジェクトの開発に比べるとこのデメリットの影響は大きくないと言えます。
充実したライブラリ
Python は標準ライブラリの他にサードパーティライブラリが充実していて、データ分析、機械学習、 Web 開発などの分野でも広く使われています。ただし機械学習等のライブラリは競技プログラミングのアルゴリズムのコンテストで活躍することはあまり多くはありません。 AHC などのヒューリスティックコンテストでは、お題によっては活躍の可能性がありそうですが、本記事の執筆時点では実際に使われて上位に入った例はあまり広まっていないようです。
競技プログラミングで使用する言語選択に悩む人への助言
この Python 版 APG4b では、プログラミング言語 Python の学習をします。APG4b には、同様のコンセプトでプログラミング言語 C++ を学習する教材(C++ 版 APG4b)も存在します。より多くのユーザーにとって競技プログラミングを入門しやすいものにするため、また AtCoder で 2 番目に使用者の多い言語である Python 版 APG4b を作成してほしいという声を受けて、今回執筆の運びとなりました。
競技プログラミングは多くの言語で行うことができる競技で、AtCoder でも主要な言語の多くを使用することが可能です1。実際にプログラミングを学んでから競技プログラミングを始めた方には自分が得意な言語で挑んでいる方も多く存在します。しかし、プログラミングを学ぶために競技プログラミングを始める方は、使用する言語をこれから決めなければなりません。上に挙げた Python の特徴と内容が重複する部分がありますが、もう一度整理してみましょう。
もしプログラミングでやりたいことがある場合は、それに適した言語が 1 つの選択肢となるでしょう。例えば、アンドロイドのアプリ開発がしたい場合は Java や Kotlin、ゲームが作りたい場合は C++ や C# といった具合にです。特に使用したい言語が決まっていない人には Python が選択肢の1つとなることでしょう。
ここでは Python が競技プログラミングを始める言語として適している理由と、他の言語と比べて Python が競技プログラミングに適していない点について挙げたいと思います。
Pythonが競技プログラミングを始める言語として適している理由
1. シンプルで学習がしやすい
Python は分かりやすい文法を持っており、初めてプログラミングに触る人にフレンドリーな言語です。これは主観的な意見に見えるかもしれませんが、多くの Python の学習教材でこのような理由が挙げられていることからある程度一般的な認識といって良いでしょう。
2. 競技プログラミングをする言語としてPythonがポピュラーである
AtCoder で使用されている言語のうち、Python は C++ に次いで 2 番目にポピュラーな言語です2。そのため、競技プログラミングのための情報を Python で得ることは比較的容易です。SNS 等での質問にも答えが帰ってくることを期待しやすいでしょう。
3. 豊富なライブラリを持ち、広い分野で使用されている
もしかすると、Python はデータサイエンスや機械学習といった分野でよく使われているといった話を耳にしたことがあるかもしれません。しかし、Python はそのような用途限定の言語というわけではありません。Python は様々な領域で使われており、一般の人気プログラミング言語ランキングでは 1、2 を争う言語でもあります3。例えば、ゲーム開発や Web 開発といった、他の分野でもある程度使用されています。そのため、やりたいことができた際には新しい言語を学習しなおすことなく取り組むことができるでしょう4。
他の言語と比べて Python が競技プログラミングに適していない点
1. 他の言語よりも実行速度が遅い
Python は性質上他の言語よりも実行速度が遅いという点があります。競技プログラミングでは、ある程度高速なプログラムを書くことが要求されることがあります。そのような場面では、どうしても C++ や Rust といった高速な言語よりも不利になってしまう側面があることは否めません。
2. C++ の方が競技プログラミング用途としてポピュラーな言語である
C++ の方が競技プログラミング用途としてポピュラーな言語であることから、C++ の方が Python よりも情報を得やすいといった点もあるでしょう5。
3. 国際情報オリンピック(IOI)、日本情報オリンピック(JOI)本選において Python を使用することができない
執筆時点において、たいていのプログラミングコンテストにおいて Python は使用可能言語に含まれていますが、中高生の多くが目標としている国際情報オリンピック(IOI)、日本情報オリンピック(JOI)本選において使用できる言語が C++ のみであるといったように、一部のコンテストでは使用できないことがあるので注意しておきましょう。
この教材では Python での学習を推奨しますが、それは他のプログラミング言語で学習することを推奨しないものではありません。以上の点を参考にしながら、自分が学習したいプログラミング言語で競技プログラミングを始めてみましょう。
著者(敬称略・順不同)
keymoon,Kiri8128, riantkb, shotoyoo, tatyam
運営担当
kaede2020(誤植・ご意見等はお問い合わせフォームからお願いします。)