京都大学広報誌
京都大学広報誌『紅萠』

ホーム > 紅萠 > 授業・研究紹介

授業に潜入! おもしろ学問

2024年春号

授業に潜入! おもしろ学問

情報学科目群/プログラミング演習(Python)
プログラミングを遊び尽くし
学びのコツを体得する

喜多 一
国際高等教育院 教授

岡本雅子
国際高等教育院 特定講師

家電や自動車、ウェブサイトやアプリケーションなど、私たちの生活を便利にするものの多くはコンピュータによって機能している。そのコンピュータを思いどおりに動かすのに必要なのがプログラム。プログラムを記述するプログラミング言語も、C言語やJava、BASIC、Scratchなど多数のものが開発され利用されている。なかでも、AIのほかさまざまな学術分野で活用され、近年注目されているのがPython(パイソン)。初学者にも取り組みやすいうえに、応用範囲の広さも魅力。この授業では、Pythonの演習をとおして、学生一人ひとりが創造的にプログラミングするための土台作りをサポートする。

受講の前に……

この授業では、Pythonを題材にプログラミングの基礎概念を学び、簡単なプログラムを設計、実装、テストできるようになることを目指します。プログラミングは初学者にとってハードルが高いので、自宅で予習して、授業で学習を深める反転授業の形式を採用。宿題は教科書を読んでサンプルのプログラムをそのとおり作成して動かしてくることを課し、教員やTAがその場でサポートできる授業でその解説と発展的な課題に取り組みます。今回の授業では、タートルグラフィックスを使用した課題作品の講評と、プログラムの設計に必要なプロセスを説明します。

喜多 前回の授業では、タートルグラフィックスという機能を扱いました。この機能は、前進や回転を命令するコードによってカメを模したカーソルを動かし、その軌跡でグラフィックを作成するものです。課題としてタートルグラフィックスを使った作品制作に挑戦してもらいましたので、今日はみなさんの作品の講評から始めましょう()。

喜多 一教授

橋本さんの作品は夜景を描いた綺麗な絵です(a)。ソースコードを書くのにかなり苦労したのでは。

橋本さん● カメに前進や回転を一つひとつ指示するのに骨が折れました。とくに三角形を描くのがうまくゆかず、苦労しました。

次は山口さんの作品です(b)。

山口さん● マウスを使って絵を描くと、それを放射状にコピーして万華鏡のような模様になるようにしました。できれば鏡像にしたかったのですが、難しくて断念しました。

左右対称の作品に挑戦した方は他にもいましたが、向かいあう図形をひっくり返して作図するプログラムは難しいですよね。
諸橋さんの作品はカメがデジタル表示の数字を描くものです(c

諸橋さん● なにか機能をもたせたくて、デジタル時計にしました。1分ごとに数字が変化するように設計できたので満足しています。

パソコン内蔵の時計に同期して数字が変化するんですね。カメは頻繁に動かないといけないから大忙しですね(笑)。
小林さんの作品は花火でしょうか(d)。どこが難しかったですか?

小林さん● 大きな花火の背景で小さな花火が同時に表示されるように並列処理するのがうまくゆかず、苦心しました。

タートルグラフィックスではカメは同時にひとつしか動かせません。別の機能を組み合わせる並列処理を勉強して挑戦したのですね。
みなさんありがとうございました。ソースコードはダウンロードできますので、「いいな」と思った作品があればぜひ動かしてみてください。


    

三目並べの課題に挑戦

今回の授業ではプログラミングの全体像を学びましょう。先に授業中に取り組む課題を説明します。

課題

三目並べにおいて、先手が勝っていることを判定する方法を説明せよ

みなさん、「三目並べ」は知っていますか。3×3の格子に先手は○、後手は×を交互に書き、先に自身の手番の印を一列揃えたら勝ちという遊びです。この遊びをプログラミングで再現するうえで、「先手の勝ちを判定する方法を説明してください」というのが課題です。この遊びを知らない人に電話でルールを説明して審判を頼むようなものですね。

説明する際には、盤面上の位置を縦横それぞれ「0、1、2」として、「盤面(0、1)が○である」といった表現で記述してください。例えば0行めの横方向で先手が勝っていることは、「盤面(0、0)が○である」かつ「盤面(0、1)が○である」かつ「盤面(0、2)が○である」という条件で表現できますね。人間なら言葉で説明されなくても数分間遊べばなんとなくルールが分かります。ところが、コンピュータは言葉にしないとなにもできません。だから、まずは言葉にしてみましょうという課題です。

プログラミングでの「家の建て方」を学ぶ

これまでの授業でPythonの主要な機能はすべて学びました。ですが、それだけではプログラムは設計できません。なぜなら、これまで学んだのは大工仕事でいうと、「金槌」と「のこぎり」の使い方だからです。みなさんは道具をひととおり使えるようになりました。ですが、家を建てるには、家とはどんなもので、どのような手順で建てればよいかを知っている必要があります。そこで今回の授業からは、三目並べを例に家の建て方、つまりプログラムを完成させるまでの工程を学びましょう。

全体像を簡単に説明します()。はじめに、目的である「三目並べ」という遊びはどのようなもので、どう進行するのかを言葉で表現します。次に、その言葉を分析します。プログラムの要素となる変数やその値、関数としてなにを表現すればよいかという視点から分析することで、プログラムに必要なものを理解できます。この段階ではパソコンは必要ありません。

分析が終わったら、プログラムを組む順番を考え、動作テストの方法も決めておきます。ここまで進めてはじめてパソコンでの作業に移り、プログラムを構成するデータや関数を作成します。作った関数はその都度テストし、最後にすべての関数を組み合わせてテストして完成です。

設計には文系の素養も必要

分析の手順を具体的に説明します。まずは、三目並べを言葉で説明しましょう(a)。小学生でも遊べるような単純な遊びですが、「交互に手番を入れ替える」、「3×3マスの盤面を使用する」などとあらためて言葉にするのは骨が折れます。言葉にできたら、名詞や形容動詞、動詞などの品詞に着目して分析します(b)(c)。すると、特定の値や状態を範囲として含む言葉があることが分かります。

例えば名詞だと、「手番」。手番は「先手」か「後手」かという2つの値をとります。ほかには「盤面」もあります。「盤面」には9マスがあって、それぞれ空いているか、○が書かれているか、×が書かれているかの3通りの状態がありえます。こうした特定の値や状態を含む名詞が「変数」です。

次に動作に関する表現に着目すると、「どちらの手番か」、「マスの状態はどうなっているか」、「勝っているか、負けているか」と状態を調べる表現があるはずです。他には、「手番を変える」、「ここに○を書く」という状態を変える表現もありますね。調べたり、変えたりする動作を担うのが「関数」です。

ここまでの作業で、三目並べにおける「変数」と「関数」はなにかが分かりました。この分析の段階は、わりと文系の世界なんです。

ここまでくればコンピュータに指示を与えるソースコードを書けますが、動作テストの方法を先に考えておきます。今回は実際に遊んだ場合の棋譜を、勝敗パターンごとにいくつか用意しておきましょう。これで、棋譜どおりに動くかどうかをいつでも確認できます。

テストも用意できたら、いよいよソースコードを書く段階です。さきほど確認した「変数」と「関数」を設計します(d)(e)。例えば、盤面の状態を表すには、3×3の要素をもつことができるリストというデータ形式の変数をboard とし、それぞれの要素をとる値は「0=空き」、「1=先手(○)」、「2=後手(×)」とします。ただし、0、1、2という数字はプログラムでは別の意味でも使用するので、勝敗判定の際の「引き分け」を含めて、「OPEN=0」、「FIRST=1」、「SECOND=2」、「DRAW=3」と定義しておきましょう。関数も同様にソースコードで表現します。

それでは、本日の課題に取り組んでください。来週の授業では、プログラム全体のソースコードを確認しながら、完成までの流れを理解しましょう。






オリジナルの教科書に込めた想いと工夫


「授業で使用する教科書は、2019年に喜多教授が独自に執筆したもの。印刷・製本はせず、PDF形式で学生に配り学外にも無料公開している。2021年版、2023年版と合わせた累計ダウンロード数は100万回を超す。共著者の岡本雅子特定講師は、大学院生として喜多教授のもとでプログラミングの教授法を研究し、現在はともに授業を担当する。


授業でも取り上げるフラクタル図形の日よけの下で

喜多 授業の目標は、学生がそれぞれの研究に進んだ際に、プログラミングを活用するための土台づくりです。学年も学部も問わないので、受講生の7割は初学者。文系の学生も多くて関心はバラバラなので、高校までで学んだことを踏まえ幅広く活かせる知識が身につくよう工夫しています。
教科書では、ソースコードを数式や英語のように理解してしまうなどの、初学者にありがちな誤解もフォロー。2021年度版からは、初学者向けのプログラミング教授法で博士号を取得した岡本先生にも参加いただいて、毎年改訂を重ねています。教科書を独自に用意する例は他大学にもありますが、初学者に寄り添うものは珍しいはずです。


岡本 授業中に学生から相談を受ける際に意識しているのは、考え方でつまずいているのか、技術的な問題なのかを区別すること。技術的な問題は他の学生もつまずきやすいので共有し、考え方の場合はどのような表現や喩え方であればわかりやすく伝わるかを工夫しています。


喜多 教科書を無料でダウンロードできるようにしたのは、友人とシェアしながらわいわい学んでほしかったから。プログラミングは「これができるなら、こういうこともできるはずだ」と、楽しんで取り組むと吸収が早い。プログラムをあれこれいじりまわして、試行錯誤しながら能動的に学ぶコツを身につけてもらえると嬉しいですね。

教科書は京都大学学術情報リポジトリ
KURENAIで公開中

和文はこちら


英文はこちら


きた・はじめ
1959年、大阪に生まれる。京都大学大学院工学研究科博士後期課程を研究指導認定退学。工学博士。東京工業大学助教授などを経て、2013年から現職。

おかもと・まさこ
1977年、愛知に生まれる。京都大学大学院情報学研究科博士後期課程を修了。博士(情報学)。京都大学高等教育研究開発推進センター特定講師などを経て、2023年から現職。


授業・研究紹介

関連リンク

関連タグ