見出し画像

超初心者がはじめるPython練習方法

自転車シリーズを書いている途中でしたが、前々からやりたかったPythonの勉強を始めました。緊急事態宣言の影響で自宅から出れないためです。私なりの所感を記載します。

Progateやってみた

何はともあれProgateですよね。
もう説明不要なくらい初心者にはうってつけのサイトだと思います。
私はここでHTML、CSS、コマンドラインの勉強をさせてもらって自信に繋がりました。コンピュータの世界って遠くも難しくもないんだなって実感させてくれる凄いサイトだと思います。

なので、そのままPythonコースを暫く練習させていただきました。
でも「こういう機能があるよ!こういう書き方をするよ!!」という紹介が基本的なレッスン内容で、何となく目的にどのように近づくのかが分かりづらいなと感じてしまいました。それが分からないあたりがきっと超初心者なんでしょうね。まずは自分で手を動かして、失敗して、それではじめて徐々に理解が進むのでしょうけれど、親切が故に考えないで答えを何度も見て書く行為になるため記憶の定着がいまいちでした。

あと誤解が無いように書いておくのですが、プログラミングって本来は問題解決の道具であって、そのものは目的でないと思います。
ですから私みたいに、とりあえず勉強しようって方々はProgateのような超分かりやすい教材であっても、何となく消化するが故に留まってしまうこと自体が問題なのだと思います。
目的物がはっきりしている状態で勉強し始めたほうが、きっと成果はきちっと上がるのだと思います。目的って大事。

京都大学のレジュメやってみた

京都大学から全学科共通向け教材がオープンになっていました。2月頃にツイッターでレコメンドされたので、ダウンロードさせて頂きました。公開して下さっている大学および先生方に感謝申し上げます。

まさに初学者向けに作られている内容で、これまで見たことが無いくらい分かりやすい教材でした。70ページ目くらいまで進めたものの、段々飽きてきたので中断しています。

どうしてもプログラミングって書き方とかお作法が分かっていないと出来ないことが多いためか、本当に基礎の基礎(英単語を粛々と覚える)みたいな作業が最初にありがちなんですよね。ここの分量が多いのが、超初心者にとって躓きやすい重大ポイントかと思います。

Python-Izmでプログラム構造が分かったつもりになった

Python-Izmという学習サイトがあります。
私がこのサイトを気に入っている点は、文章の構造化が大⇛小とキレイに纏まっているなと感じる点です。例えば、モジュールの説明文が「基本構文」の項でサラッと書かれているのですが、私はものすごく重要なことだと思っています。

なぜなら、プログラムとは、順次実行・条件分岐・反復の3つの命令によって成り立っていると言われますが、忘れがちな「定義」があってこそなんです。その定義がどのように大枠として形どられ、階層化されていくかがパッと理解できるかどうかは本当に重要だと思います。モジュールの説明は公式ドキュメントにも書いてあるのですが、順番がずっと後ろなんです。

ということで、プログラムの基本構造ってどうなっているのかが分かったつもりになれた大収穫に満足し、Python-Izmは休憩になりました。

AtCorderやりはじめた(←イマココ)

結局、目的物の制作のためにプログラミングを学んでいるわけではなくて、プログラミングに触れることそのものが目的にすり替わっているので、何か楽しみを見つけなくてはと思い始めました。

そうしてQiita難民していたら、AtCorder(日本発の競技プログラミングサイト)があることを知りました。そこには過去問題が沢山あって、本当にプログラミングに触れたばかりでも十分に楽しめる問題が沢山あるということが分かりました。それがAtCorder Scoresです。

そこで、スコア100(一番簡単なレート)の問題から解いてみて、それでプログラミングの楽しさを知ってみることにしました。

これが私には大変合っており、とりあえず書き方を覚えるというよりは、与えられた命題を解決するために必要な記述のしかたを調べながら学ぶことが出来、どのように解決するか、その解法と記述の仕方を両面から考えるところがツボにハマりました。

で、いま、一番はじめに出てくる、「ABC 042: A – 和風いろはちゃんイージー / Iroha and Haiku (ABC Edition)」という問題を解いています。
要するに A, B, C に与えられる文字数が、並びに関係なく五七五となればいいわけです。
私は A + B + C の文字数が、どのような並びであっても17文字であれば正解であると考え、下記のようにコーディングしたのですが何故か正解にならず悶々としている状態です。どなたか何がダメなのか指摘して頂けると大変助かります(笑)

a, b, c = map(int, input().split())

s = a + b + c

if s == 17:
   print("Yes")
else:
   print("No")

これからの勉強

競技プログラミングは考える練習にもなって本当に面白いです。
私のように、目的が定まっていない方は、競技プログラミングの過去問を解くことで勉強をしては如何でしょうか。
私は暫くはAtCorderの過去問を解いて勉強したいと思います。

では。

この記事が参加している募集

#おうち時間を工夫で楽しく

95,453件

この記事が気に入ったらサポートをしてみませんか?