7839

雑草魂エンジニアブログ

Bot と一緒にインタラクティブに学ぶ Python 入門 〜 サイコロゲーム編

前回、「GitHub Learning Lab」のPython入門コースの紹介記事を書いた。入門編はあまりに簡単な方も多かったかもしれない。「GitHub Learning Lab」には、もうひとつPythonのコース「Intermediate Python」があったので、受講してみた。

lab.github.com

このカリキュラムでは、サイコロゲームを実際にPythonで作ることができる。実装する中で、forifなどの重要な構文を実践的に学びながら、体感することができるので非常にいいように思えた。サイコロゲームといったイメージがしやすいものを実際にPythonのコードで実装するのはわかりやすく、とてもいい入門コースであるように思えた。

Intermediate Python

「Intermediate Python」は「GitHub Learning Lab」にあるPythonコースのひとつである。現在はまだ日本語に翻訳されておらず、英語のみであるが、Botインタラクティブにステップアップで学習を進めることができる。英語が少し読めるレベルであれば、問題なくチャレンジできるので、是非挑戦してみて欲しい。

  • Step1. Set up your project
  • Step2. Running a Python program
  • Step3. Using Variables
  • Step4. Rolling multiple Dice
  • Step5. Adding Conditionals
  • Step6. Adding User Input

GitHub Learning Lab」の教材は、すべて Issue や Pull Request など GitHub の機能を活用した構成になっており、GitHubの使い方に慣れる面でも非常に有用だ。プログラミング入門で、PythonGitHubの使い方を実践を通してマスターできるのは一石二鳥であると思う。

Step0. セットアップ

まず「Start free course」ボタンを押してセットアップを行う。本コースで使う GitHub リポジトリの公開範囲を選択する必要があり、私の場合は Public しか選択できなかったので、そのままで進めた。すると、自動的に intermediate-python-course が作られる。

f:id:serip39:20200814125614p:plain

これからは、bot から 次に何をすべきか、丁寧に説明が書かれた issue がリポジトリに追加されているので、それに従って進めていく。

Step1. Set up your project

ここでは、開発環境の構築を行う。Python3、GitがローカルのPCにインストールされているかの確認、および本カリキュラムのレポジトリのクローンを行う。(Python2 しかインストールしていない方は、Python3 をインストールする必要がある。)私が実施したローカル環境は以下のバージョンであった。

$ python -V
Python 3.7.7
$ git --version
git version 2.27.0

確認後、お気に入りのサイコロゲームを issue のコメント欄に記載して Step. 1 は終了となる。

Step2. Running a Python program

ここでは、実際にPythonコードの動作確認、そして関数の使い方を学ぶ。 コメントアウトされている部分を解除して、表示確認ができれば OK である。

結果をcommitして、pushすれば、Step. 2 は終了となる。 git に不慣れな方でも大丈夫なように丁寧なコマンドが載っているので、git 操作に関してはコピペでもいけるので安心して欲しい。

Step3. Using Variables

ここでは、変数の使い方を学ぶ。 サイコロの出る目はランダムに変わるので、乱数の作り方、さらには変数をどのように表示すればいいか、 random f-string を使って実装する方法を学ぶ。

乱数で表示された結果を issue のコメント欄に貼ることで、Step. 3 は終了となる。

Step4. Rolling multiple Dice

先ほどは、一つのサイコロを乱数で表示させたが、ここでは複数のサイコロの目を表示する方法を考える。 反復処理を行う際に用いられる for の使い方を実践を通して学ぶことができる。

dice_rolls = 2
dice_sum = 0
for i in range(0,dice_rolls):
  roll = random.randint(1,6)
  dice_sum += roll
  print(f'You rolled a {roll}')
print(f'You have rolled a total of {dice_sum}')

反復処理をしながら、サイコロの出た目の合計値を計算する方法も詳しく説明してあり、非常にわかりやすかった。

結果をcommitして、pushすれば、Step. 4 は終了となる。

Step5. Adding Conditionals

ここでは、条件分岐 if の使い方を実践を通して学ぶ。 サイコロの出た目に応じて、表示を切り替えるように実装を行う。if の使い方に関しても、詳細に書かれており、わかりやすかった。実際のコードは、for文の中に含まれて、少し複雑に見えるが、ステップアップで実装してきたので、理解しやすいように思う。

dice_rolls = 2
dice_sum = 0
for i in range(0,dice_rolls):
  roll = random.randint(1,6)
  dice_sum += roll
  if roll == 1:
    print(f'You rolled a {roll}! Critical Fail')
  elif roll == 6:
    print(f'You rolled a {roll}! Critical Success!')
  else:
    print(f'You rolled a {roll}')
print(f'You have rolled a total of {dice_sum}')

issue のコメント欄に「Critical Success」を表示させるためのサイコロの目の数を記載して、Step. 5 は終了となる。

Step6. Adding User Input

最後に、サイコロの数とサイコロの面数をユーザーの入力で自由に決定できるようにする。これまでは、サイコロの数は2個、サイコロの面は6面としていたが、この変数をユーザーの入力を受け付けて、結果を出力するようにする。

dice_rolls = int(input('How many dice would you like to roll? '))
dice_size = int(input('How many sides are the dice? '))
for i in range(0,dice_rolls):
 roll = random.randint(1,dice_size)
 ~ 省略 ~

動作確認まで完了したら、結果をcommitして、pushすれば、本カリキュラムは終了となる。 発展としては、以下が挙げられている。

  • プレイヤーやチーム名を追加するにはどうすればいいか
  • 配列で各プレイヤーのサイコロの出た目を保存するにはどうすればいいか
  • 本当のサイコロゲームを実際にPythonで実装してみよう

まとめ

Pythonの入門コースのひとつの選択肢として、「GitHub Learning Lab」の「Intermediate Python」は非常に有用だと思えた。サイコロゲームという誰でも知っているゲームを実際に自分の手で簡単に作れることは初学者にとってとてもいい感動体験ではないかと思う。また、こちらをベースとして発展的なアプリケーションを作ることもできるので、さらなる学びが得られるのではないかと思う。また、何といっても、Bot とのインタラクティブな対話をしながら進める実装は楽しい体験になると思う。是非、一度体験してみて欲しい。

それでは、ステキな開発ライフを。