はじめに
これまでのお話で、Pythonプログラミングを行う準備が整っています。
今回は簡単なゲームを作りながら、プログラミングの要点を学びましょう!
最初から、「全部を学ぼう」とはせず、「作りたい物に必要な要素を調べながら作る」というスタンスで学んでいきましょう。
じゃんけんゲームを作ろう!
プログラムの作るとき、最初に考えなければいけないことは「コンピュータが行う処理の流れ」です。
※硬い言葉で言うと、「設計」になります。
そこで、2人でじゃんけんを行うときの流れを整理してみましょう。
② 掛け声と共に、両者が出し手を晒す
③ 両者が出し手から、勝敗の判定する
これを相手をコンピュータにして、コンピュータで処理できる流れに置き換えます。
ここで、特に注意すべきはことが2つあります。
これを踏まえると、処理の流れは次のようになります。
(2) コンピュータの出し手を決める(ただし、自分には教えない)
(3) 自分の出し手を決める
(4) 勝敗の判定を行う
(5) 勝敗の結果を表示する
「じゃんけんプログラム」の全体像
まずは、全体を眺めてみましょう。
※説明のためにコメントをかなり多めに書いています
#########################
# パッケージのインポート #
#########################
import random
########################
# 出し手の種類を設定 #
########################
hands = ["グー", "チョキ", "パー"]
##############################
# コンピュータの出し手を決定 #
##############################
m = random.randint(0, 2)
com = hands[m]
############################
# プレイヤーの出し手を決定 #
############################
print("0:グー 1:チョキ 2:パー")
p = int(input("じゃんけん・・・"))
player = hands[p]
##############
# 勝敗判定 #
##############
# 「あいこ」判定
if player == com:
result = "あいこ"
# プレイヤーが「グー」を出したとき
elif player == "グー":
if com == "チョキ":
result = "勝ち"
elif com == "パー":
result = "負け"
# プレイヤーが「チョキ」を出したとき
elif player == "チョキ":
if com == "グー":
result = "負け"
elif com == "パー":
result = "勝ち"
# プレイヤーが「パー」を出したとき
elif player == "パー":
if com == "グー":
result = "勝ち"
elif com == "チョキ":
result = "負け"
##############
# 結果表示 #
##############
print(f"コンピュータは、「{com}」を出しました")
print(f"あなたは、「{player}」を出したので、あなたの「{result}」です")
Jupyter Notebookで書くなら、こんな感じでしょうか♪
※もちろん、詳しい説明は後回しにして、「まずはプログラム実行を!!」でもOKです。
ブロックごとのプログラムの説明
パッケージのインポート
#########################
# パッケージのインポート #
#########################
import random
まず初めの記述が、このプログラムで使用するパッケージのインポート宣言です。
初心者には、とっつきにくいと思うので大まかなイメージで説明します。
実は、プログラミングの世界ではすごい優秀な方々が、みんなのプログラミングが楽になるように素晴らしいプログラムセット(パッケージ)を作ってくれてます。
その優秀な方々が作ったプログラムセット(パッケージ)を使わせてもらうための方法が「import [パッケージ名称]」となります。
今回は、乱数を生成するためのパッケージ(random)を使います。
出し手の種類を設定
########################
# 出し手の種類を設定 #
########################
hands = ["グー", "チョキ", "パー"]
じゃんけんで使用する3つの出し手は、list型の変数「hands」 で管理します。
そして、配列型の各要素にはstr型で「グー」、「チョキ」、「パー」を設定します。
ここで、配列型や文字列型などのデータ型について説明します。
プログラミングで使用する値は「データ型」と呼ばれる種類に分類されます。
Pythonで使用する主なデータ型は以下となります。
データ型 | 名称 | 解説 |
---|---|---|
str | 文字列 | “(ダブルクォーテーション)や'(シングルクォーテーション)で囲み、文字として定義される。 |
int | 整数 | 小数点を持たない数値 |
float | 浮動小数点 | 小数点を持つ数値 |
bool | 論理値 | True:真、False:偽の2値を持つ |
datetime | 日付 | 年月日-時分秒で管理される値 |
list | 配列 | カンマ区切りで複数の要素を [ ]で囲んで管理する。 各要素の値は、先頭から順位に0、1、2・・・の番号で管理される。 |
tuple | タプル | カンマ区切りで複数の要素を ( )で囲んで管理する。 各要素の値は、先頭から順位に0、1、2・・・の番号で管理される。 ※list型との違いは、1度設定した要素は変更不可であること |
dectionary | 辞書 | カンマ区切りで複数の要素をキー値と値の組み合わせにして { }で囲んで管理する。 各要素の値は、キー値によって管理される。 |
コンピュータの出し手を決定
##############################
# コンピュータの出し手を決定 #
##############################
m = random.randint(0, 2)
com = hands[m]
コンピュータの出し手は、最初にインポートした乱数パッケージを使用して決定します。
まず、「random.randint()」では、「randomパッケージのrandint関数を使うこと」を示します。
ここで、「randint()」は「int型:整数で()で指定した範囲で数字を出力する関数」です。
※今回は、「(0, 2)」なので、「0、1、2」のいずれかが出力されます。
そして、「m = random.randint(0, 2)」で「0、1、2」のいずれかを変数「m」に代入します。
さらに、「hands[m]」では配列 handsから変数「m」に代入された数字に対応する要素を出力し、「com = hands[m]」で変数「com」に代入します。
この時点で変数「com」には「グー、チョキ、パー」のいずれかが代入されています。
プレイヤーの出し手を決定
############################
# プレイヤーの出し手を決定 #
############################
print("0:グー 1:チョキ 2:パー")
p = int(input("じゃんけん・・・"))
player = hands[p]
プレイヤーの出し手は、もちろん自分で決めます。
まず、「print(“0:グー 1:チョキ 2:パー”)」でどの数字がどの出し手に対応するかを表示します。
そして、「input(“じゃんけん・・・”)」で、入力用のテキストボックスを表示します。
「0、1、2」値を入力したら、それを「int()」でint型:整数に変換します。
※画面で入力した数字は、string型:文字列として認識されています。
その後、「p = int(input(“じゃんけん・・・”))」で、自分が入力した数字をint型:整数で変数「p」に代入します。
最後は、コンピュータの時と同様に変数「player」へ出し手を代入します。
勝敗判定
##############
# 勝敗判定 #
##############
# 「あいこ」判定
if player == com:
result = "あいこ"
# プレイヤーが「グー」を出したとき
elif player == "グー":
if com == "チョキ":
result = "勝ち"
elif com == "パー":
result = "負け"
〜〜〜〜〜〜〜〜〜〜〜〜
このプログラムの肝となる「じゃんけんの勝敗」を決める処理になります。
ここは愚直に自分と相手の出し手を比較して判断する条件分岐を使用します。
Pythonでの条件分岐は次のように記述します。
※「elif」と「else」の記述は任意なので、必要な場合のみ記載します。
if [条件①]:
[条件①が「真」の場合の処理]
elif [条件②]:
[条件②が「真」の場合の処理]
elif [条件③]
[条件③が「真」の場合の処理]
・・・・・
else:
[上記の全ての条件が「偽」の場合の処理]
「自分の出し手」と「相手の出して」を比較して、合致する条件に設定された処理を実行して変数「result」に「あいこ、勝ち、負け」のいずれかを設定します。
また、条件を設定する時に使用する比較演算子についても触れておきます。
比較演算子とは、条件分岐において「条件を設定するために使用する記号」です。
比較演算子 | 解説 |
---|---|
a < b | aはbより小さい |
a <= b | aはb以下 |
a > b | aはbより大きい |
a >= b | aはb以上 |
a == b | aとbは等しい |
a != b | aとbは等しくない |
結果表示
##############
# 結果表示 #
##############
print(f"コンピュータは、「{com}」を出しました")
print(f"あなたは、「{player}」を出したので、あなたの「{result}」です")
最後に、「print」を応用して結果を出力しましょう!
(やはり、勝敗の結果はカッコよく表示したいですよね(笑))
ここではf関数を使用して、固定文字と変数を組み合わせた文字列を作成します。
このとき、変数は{ }で囲う必要があります。
最後に
今回は、じゃんけんプログラムを使って、プログラミングの要点を解説しました。
「たかがじゃんけんに、説明が仰々しいな〜」と思った方もいるかもしれません。
しかし、このプログラムによって、プログラミングの基礎概念である「データ型」、「変数の扱い」、「条件分岐」、さらには「パッケージのインポート」まで学ぶことができました。
次回は、このプログラムをアップデートして同様に基礎概念である「繰り返し」と「関数」を説明します。
楽しみにしてください♪
コメント