サイコロゲームを作りながらPythonの基本文法を確認する ~GitHub Learning Lab~

f:id:osushi_engineer:20200901030649p:plain

hisacomです。

以前AWS Lambdaを利用時にPythonを使ってから、ちょくちょくPythonの勉強を進めています。今回はセリピーさんのブログで書かれていた情報を元にGitHub Learning LabPythonを学ぶ方法を試してみました。

serip39.hatenablog.com

 現在英語版のみしかありませんが、文量も多くないのである程度英語が読める方なら問題なく進めることができると思います。記事にも要点が抜き出してありますので、参考にしていただければと思います。

GitHub Learning Labとは

GitHubを利用しながら、無料で手を動かしながら技術を学ぶことのできるサービスです。こちらのカリキュラムではサイコロゲームを作成しながらPythonを学ぶことができるようです。

lab.github.com

各ステップについて

カリキュラムは次の6ステップで行われます。

(カッコ内は個人的に翻訳してみたもの)
Step1. Set up your project(プロジェクトのセットアップ
Step2. Running a Python program(Pythonを動かしてみる
Step3. Using Variables(変数の使用
Step4. Rolling multiple Dice(複数のサイコロを振る
Step5. Adding Conditionals(条件文の追加
Step6. Adding User Input(ユーザーからの入力を受け付ける)

Step1. Set up your project(プロジェクトのセットアップ)

まず、テーブルゲームで使うようなダイスゲームを作るよという説明があります。Python,Gitの確認を行い、問題ないようならGit cloneでカリキュラム用のリポジトリをクローンします。Python3の環境設定については、以前行っていたので問題ありませんでした。

osushi-engineer.hatenablog.com

クローン後のディレクトリ中には以下の2ファイルが入っているので確認します。
- README.md
- dice-roller.py

カリキュラムで変更していくことになるPythonのコードdice-roller.pyの中身は以下のようになっています。

お気に入りのダイスロールゲームをコメントに残すと、次の動作を指定してくれます(コメントを残すとbotが次のStepを表示してくれるのが楽しい)

f:id:osushi_engineer:20200901040150p:plain

Step2. Running a Python program

内部にはダイスローラーを作成するときに、全コマンドの含まれる関数mainが表示されます。その下に、その関数を呼び出すifステートメントが表示されます。

今回の開発にはmian関数内のコードのみを変更します。


main関数の2行目が#print('You rolled a die')となっていますが、#を前に置くことでコメント化しているようです。#を削除することで標準出力を行います。

$ python dice_roller.py
You rolled a die

ターミナルで表示を確認したら、GitHubにプッシュを行います。

Step3. Using Variables

コードを以下のように書き換え、変数宣言のやり方を確認します。
Pythonではroll = 5のように書くだけで変数宣言ができ、標準出力の際は中括弧で変数の中身を表示できるようです。

gist.github.com
以上のコードをコンパイルして「You rolled a 5」が表示されれば成功です。

Pythonのf-文字列でsyntax errorが発生する

このコードでsyntax errorが起こる場合は、再度`python -V`でPythonのバージョンが古くなっていないかを確認してください。f文字列という上記の記述方法はバージョン3.6以降に追加された機能のようです。
私の場合、エディター内のターミナルを再起動していなかったので{roll}の部分でエラーがでてしまっていました。

次にランダムの表示を行います。
プログラム上部にパッケージのインポート文を書きます。
random.randint(1, 6)で1〜6の乱数を生成できるようなので、変数rollに代入します。

gist.github.com

ランダム表示で出力された数字をGitHubのコメントに書き記すと次のステップに進みます。

Step4. Making Python Roll Multiple Dice

次にfor文を使って、複数回サイコロを降ってみるようです。
Pythonでのfor文の記述方法は
for i in range(0,dice_rolls):のようなので、そのように記述します。また一般的なゲームではサイコロの出目の足算を利用するため、変数dice_sumを作成し、for文の中で足算を行います。

gist.github.com

コードを見ると、Pythonにはインデントが重要だということが分かります。]

Step5. Adding Conditionals

if文を使って、出た値によって表示を変える処理を行います。if文でランダムによって出た値の表示を3分岐させます。中括弧の代わりにコロン:を用いるのがPythonの特徴だということが分かります。

gist.github.com

Step6. Adding User Input

最後に変数にユーザーからの入力を代入できるようにします。

dice_rolls = int(input('何個サイコロを振りますか? '))int(input(''))表記でユーザからの入力を受付けられるようです。インプットの記述を追加することで、サイコロを降る回数、サイコロの最大値を動的に設定することが可能となります。

 

gist.github.com

以上で「ユーザーからサイコロを振る数、サイコロの最大出目を聞き出しサイコロを降る関数」をPythonで作成することができました。

まとめ

GitHub Learning Labを用いてPythonの基礎文法を学ぶことができました。GitHubを用いながらカリキュラムを進めるのはかなり新鮮な勉強体験で、個人的には本を読みながらカリキュラムを進めるより楽しさを感じました。

GitHub Learning Labには他のカリキュラムも存在するのでぜひ体験したいと思います。また副次的に、英語リーディングとGitHubの練習もできるのがとても良いなと、特に初学者におすすめしたいと思いました。