ただいま、電話ボックスの新たな活用方法を検討中です。画期的なアイデアある方はぜひご連絡ください!!

【非IT人材の方向け】Pythonでじゃんけんプログラムを作ってみよう!

昨今流行りのプログラミング言語Python。データ分析や機械学習に適したライブラリが豊富でオープンソースな言語であるため誰でもカンタンに使えます。簡単というのは語弊がありますね。プログラミング経験ない方が一番最初にぶち当たる壁は、プログラミング環境の構築です。Pythonも本格的に使う場合は自分のPCに環境を構築し、日本語対応のための設定を行って…と、非常に面倒くさい作業が必要になりますが、Googleアカウントをお持ちの方であればGoogle Colaboratory という無料のサービスを使うことで、Pythonを使ってみることが出来ます。

機械学習 入門コースの決定版!機械学習エンジニアを目指すならcodexa(コデクサ)

無料でGPUが使えるGoogle Colaboratoryの使い方まとめ。機械学習エンジニアから初学者まで、ほぼ全てのレ…

スポンサーリンク

1.じゃんけんプログラムを作ってみよう!

本日は、プログラムの知識がない方でもじゃんけんプログラムを簡単に作成できる手順をご紹介します。
まずは、以下のソースをそのままコピーしてGoogle Colaboratoryで実行してみてください。

パーが存在しないじゃんけん

import randomprint('じゃんけんスタート')print('あなたの手を入力してください')my_hand = int(input('0:グー,1:チョキ,2:パー'))you_hand = random.randint(0,2)if my_hand == 0:  if you_hand == 0: print('あいこ')  elif you_hand == 1: print('勝ち')elif my_hand == 1:  if you_hand == 0: print('負け')  elif you_hand == 1: print('あいこ')

実行するとじゃんけんの手を選択できますので、半角数字で0、1、2のいずれかを入力してください。
タイトルにもある通り、実はこのプログラム。パーの判定ができません
なので、2(パー)を入力した場合は何も反応してくれないプログラムなのですが、0(グー)と1(チョキ)の判定処理を参考に、2(パー)の判定を追加してみてください。Pythonを知らなくてもできるハズです!!

スポンサーリンク

パーの判定が必要な個所は??

さて、無事にパーの判定を追加できたでしょうか?
自分がパーを出した時の判定処理(elif my_hand ==2:の条件)はスムーズに追加できたかと思います。自分がグー(elif my_hand ==0:)の場合と、自分がチョキ(elif my_hand ==1:)の場合にもちゃんとパーの判定を追加できたでしょうか?

じゃんけんのパターン

じゃんけんのパターンを整理すると上図のように9パターンの処理が必要なことがわかります。したがって、不完全なプログラムに追加が必要な処理は、パーが関係する5パターンです。正解のコードは以下のとおりです。

import randomprint('じゃんけんスタート')print('あなたの手を入力してください')my_hand = int(input('0:グー,1:チョキ,2:パー'))you_hand = random.randint(0,2)if my_hand == 0: if you_hand == 0:  print('あいこ') elif you_hand == 1:  print('勝ち') elif you_hand == 2:  print('負け')elif my_hand == 1: if you_hand == 0:  print('負け') elif you_hand == 1:  print('あいこ') elif you_hand == 2:  print('勝ち')elif my_hand == 2: if you_hand == 0:  print('勝ち') elif you_hand == 1:  print('負け') elif you_hand == 2: print('あいこ')

2.プログラマーの思考

さて、無事にパーの判定もできるじゃんけんプログラムが完成しました。
が、これで終わりではありません。

確かに処理は問題ないですが、ソースコードが少し冗長です。また、せっかくじゃんけんの手を数値で扱っているので、その特徴を生かしたソースコードの省略化を考えたいと思います。

数値を足したり引いたりして、判定処理をシンプルにできないか??

プログラマーはこう考えます。

 
プログラマー
できたけどすごく長い…。もっとシンプルにしたい…。
 
プログラマー
あいこのとき、自分と相手の手は一致する。じゃんけんの手は数値で識別している。
 
プログラマー
ということは…my_hand - you_hand = 0 だ!
勝ったときは?負けたときは??
言っていることがわからないという方は、下の図を見てください。自分と相手の手を引き算した時の結果をまとめました。
じゃんけんの勝敗表

このように整理するとわかりやすいですね!
先ほどのパーを追加した際も図式化して整理しましたが、プログラミングするときは情報を構造化してあげると、実現すべき処理が見えてきます。これをソースコードで表現すると以下のようになります。

import randomprint('じゃんけんスタート')print('あなたの手を入力してください')my_hand = int(input('0:グー,1:チョキ,2:パー'))you_hand = random.randint(0,2)hand_diff = my_hand - you_handif hand_diff == 0:  print('あいこ')elif hand_diff == -1 or hand_diff == 2:  print('勝ち')else:  print('負け')

だいぶスッキリしましたね!

3.じゃんけんプログラムの完全体

ちなみにこのじゃんけんプログラムの処理を突き詰めていくと、完全体(?)はこうなります。定義と処理を分離して保守性を高めてます。ぜひ、このコードをコピーしてGoogle Colaboratoryで是非実行してみてください。

import randomdef start_message():  print('じゃんけんスタート')def get_my_hand():  print('あなたの手を入力してください')  return int(input('0:グー,1:チョキ,2:パー'))def get_you_hand():  return random.randint(0,2)def view_result(hand_diff):  if hand_diff == 0: print('あいこ')  elif hand_diff == -1 or hand_diff == 2: print('勝ち')  else: print('負け')def get_hand_name(hand_number):  hands = ['グー','チョキ','パー']  return hands[hand_number]def hands_message():  hand_number = my_hand  print('あなたの手は ' + str(get_hand_name(hand_number)))  hand_number = you_hand  print('相手の手は ' + str(get_hand_name(hand_number)))start_message()my_hand = get_my_hand()you_hand = get_you_hand()hand_diff = my_hand - you_handhands_message()view_result(hand_diff)

プログラミングの世界を知るきっかけになれば幸いです。

最後まで読んでいただきありがとうございました!

ブログランキング・にほんブログ村へ

スポンサーリンク
>アイデア・発想は行動範囲に左右される

アイデア・発想は行動範囲に左右される

アイデア創出活動や、新商品・事業企画支援などもさせていただいております。お気軽にご連絡ください。

CTR IMG