【入門編】「じゃんけんゲーム」で、Pythonプログラミングの基礎を学ぶ

スキルアップ

はじめに

これまでのお話で、Pythonプログラミングを行う準備が整っています。
今回は簡単なゲームを作りながら、プログラミングの要点を学びましょう!

最初から、「全部を学ぼう」とはせず、「作りたい物に必要な要素を調べながら作る」というスタンスで学んでいきましょう。

じゃんけんゲームを作ろう!

プログラムの作るとき、最初に考えなければいけないことは「コンピュータが行う処理の流れ」です。
※硬い言葉で言うと、「設計」になります。

そこで、2人でじゃんけんを行うときの流れを整理してみましょう。

① 両者(自分と相手)が出し手(グー、チョキ、パー)を選ぶ
② 掛け声と共に、両者が出し手を晒す
③ 両者が出し手から、勝敗の判定する

これを相手をコンピュータにして、コンピュータで処理できる流れに置き換えます。
ここで、特に注意すべきはことが2つあります。

・コンピュータへ、人間の暗黙知を教える必要がある。
 →じゃんけんの「出し手」や「勝敗の決め方」など
・コンピュータは、2つの事柄を同時にできない。
 →自分とコンピュータの
出し手を同時に決められない

これを踏まえると、処理の流れは次のようになります。

(1) じゃんけんの出し手を設定する
(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辞書カンマ区切りで複数の要素をキー値と値の組み合わせにして { }で囲んで管理する。
各要素の値は、キー値によって管理される
値が同じ文字でもデータ型が異なるとプログラムでは別物として認識します。
※str型の「1」とint型の「1」は別物として扱われます。

コンピュータの出し手を決定

##############################
# コンピュータの出し手を決定     #
##############################
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:
   [上記の全ての条件が「偽」の場合の処理]
Pythonは、「インデント」で処理の単位を認識します。
※サンプルプログラムのインデントが揃っているのは、私が几帳面だからではなく、そうしなければエラーとなってプログラムが動かないからです(笑)

「自分の出し手」と「相手の出して」を比較して、合致する条件に設定された処理を実行して変数「result」に「あいこ、勝ち、負け」のいずれかを設定します

また、条件を設定する時に使用する比較演算子についても触れておきます。
比較演算子とは、条件分岐において「条件を設定するために使用する記号」です。

比較演算子解説
a < baはbより小さい
a <= baはb以下
a > baはbより大きい
a >= baはb以上
a == baとbは等しい
a != baとbは等しくない

結果表示

##############
#  結果表示   #
##############
print(f"コンピュータは、「{com}」を出しました")
print(f"あなたは、「{player}」を出したので、あなたの「{result}」です")

最後に、「print」を応用して結果を出力しましょう!
(やはり、勝敗の結果はカッコよく表示したいですよね(笑))

ここではf関数を使用して、固定文字と変数を組み合わせた文字列を作成します。
このとき、変数は{ }で囲う必要があります。

最後に

今回は、じゃんけんプログラムを使って、プログラミングの要点を解説しました。
「たかがじゃんけんに、説明が仰々しいな〜」と思った方もいるかもしれません。

しかし、このプログラムによって、プログラミングの基礎概念である「データ型」「変数の扱い」「条件分岐」、さらには「パッケージのインポート」まで学ぶことができました。

次回は、このプログラムをアップデートして同様に基礎概念である「繰り返し」「関数」を説明します。

楽しみにしてください♪

コメント

タイトルとURLをコピーしました