プログラミングの初心者向け独学基礎入門学習サイト

~programming website~

【入門編】pythonを使って簡単なアプリを作ってみよう!

約 1 分
【入門編】pythonを使って簡単なアプリを作ってみよう!

【入門編】pythonを使って簡単なアプリを作ってみよう!

簡単なじゃんけんゲームを作ってみよう!

プログラミング言語を勉強していく中で、データの型だとか、関数や変数などいろいろでてきますが、
「実際アプリ作ってみないと、どんな時に使うのかわかんないよー!(´Д`)」
っていう人が、大半だと思います!
なので『初心者の方でも簡単に作れるアプリをとりあえず作ってみよう!』ということで、
初心者の私がとりあえず作ってみたので、とりあえずアプリを作ってみたい方の参考になればと思います。

今回は、だれもが1度はやったことのある『じゃんけんゲーム!!』を作ってみたいと思います!!
中身としては、
1人プレイ用で、VSCode(Visual Studio Code)内でCPU(コンピューター)とじゃんけんして勝ち負けを決める」
というシンプルなものにします。
※いろいろ詰め込むと途中でギブアップした初心者の私がいるので、簡単に作ってます。この記事の内容をもとに改良・改善できる方はしてみてください。

中には「じゃんけんって・・・」って思うかもしれませんが、アプリ制作の基礎的中の基礎の部分って考えると
やってみて損はないと思いますよ!

それでは、実際にPythonのVSCodeを使って、作ってみましょう!(^^)

完成したコードはこれ!

実際作るって言ってもどう作っていいかわからないと思いますので、まずは私の作って完成コードを見てみてください。

import random

def validate(hand):
    if hand not in('0', '1', '2'):
        return False
    return True

def choice_hand(hand):
    hands = ['グー', 'チョキ', 'パー']
    print( hands[hand] + 'を出しました')

def judge(player,computer):
    if player == computer:
        return '引き分け'
    elif player == 0 and computer == 1:
        return '勝ち'
    elif player == 1 and computer == 2:
        return '勝ち'
    elif player == 2 and computer == 0:
        return '勝ち'
    else:
        return '負け'


print('じゃんけんやろうぜ!\nあなたは何を出しますか?(0: グー, 1: チョキ, 2: パー)')
while True:
    player_hand_str = input('数字で入力してください:')
    if validate(player_hand_str):
        computer_hand = random.randint(0,2)
        player_hand = int(player_hand_str)
        choice_hand(player_hand)
        choice_hand(computer_hand)
        result = judge(player_hand,computer_hand)
        print('じゃんけんの結果は' + result + 'でした')
        break
    else:
        print('(0: グー, 1: チョキ, 2: パー)から数字を入力してね')

いかがでしょうか?
これから作成していきますが、完成した形がイメージできないと

今どこ作ってるのかな~(。-`ω-)

ってなると思いますので、これを見てどこを作っているのか、作っているコードがどこにつながっているのかイメージしてもらえると
勉強にもなるかと思います。

ちなみに、簡単に今回作るじゃんけんゲームで使う内容を載せておきます。
・if文
・while文
・randomモジュール
・リスト
・print関数
・int関数
・input関数

※上記内容について詳しく知りたい方は、詳細をのせた記事もございますので、そちらをご確認頂ければ幸いです。

じゃんけんは、グー、チョキ、パーの3種類の組み合わせて勝敗を決めるので、条件分岐をするif文を用います。
コンピューターが同じ手ばかり出すとゲームにならないので、randomモジュールをインポートしてコンピューターが出す手を毎回変わるようにします。
あとは細かな関数やリストを使っていきます!

「文字で言ってもわかんないからとりあえず作っていこうぜー」
ということで、やっていきましょう!

関数を作ってみよう!

それでははじめに、じゃんけんのルールの部分を定義していきます!

皆さんはすでにご存じのじゃんけんですが、コンピューター君は
「ジャンケンってなんですか?ワタシニハワカリマセン」
ってエラーを吐き出すので、ちゃんとじゃんけんはこういうものだよってのを丁寧に教えていきます!

まずはじゃんけんのルールからコンピューター君に教えていきましょう!

ルール①
じゃんけんはグー、チョキ、パーがあってどれかを出す

ルール①-2
グー、チョキ、パー以外だしたら、もう一回入力してもらう

ルール②
お互いだした手の種類によって勝ち負けが決まる
・グーはチョキに強く、チョキはパーに強く、パーはグーに強い
・同じ手だったら、あいこになる

ルールはこんなところですかね。
ルール①-2は厳密にいうとじゃんけんのルールというよりはコンピューター側の設定に近い感じがしますが・・・。
この設定も大事なんで、一応入れておきます。

ちなみにじゃんけんのルールが定義(説明)された便利な関数(組み込み関数)は、pythonにないので、自分で関数を作っていきます。
関数を作るのは、 def でしたね!

ルール①:グー、チョキ、パーを出す


関数名は【choice_hand】としておきましょう。
※名前のセンスないなーって思ってても口には出さないでください。

def choice_hand():

グー、チョキ、パーの3種類あるんだよ!っていうのをリストを使って関数に設定していきます。

def choice_hand():
    hands = ['グー', 'チョキ', 'パー'] 

グー、チョキ、パーを出すっていう流れにします。

def choice_hand(hand):
    hands = ['グー', 'チョキ', 'パー']
    print( hands[hand] + 'を出しました')

急にいろいろ入ったけどどーした??って方のために簡単に説明させてもらいます。

関数choice_handの引数(()の中身)にhandを設定しました。

printで書き出す際にリストhandsの中から、グー、チョキ、パーを持ってくるようにしました。
持ってくる方法は、2行目で設定したリストから持ってきます。
リストは左からカンマ区切りで
「0」(グーが入ってるところ)、
「1」(チョキが入ってるところ)、
「2」(パーが入ってるところ)
の数字を入れることによってその数字に入っている内容を持ってくることができます。

なので、
引数handに0~2のいずれかが入ると、
リストhandsの中からグー、チョキ、パーのいずれかを持ってくる内容になってます。

例)引数handが0の場合

def choice_hand(0):
    hands = ['グー', 'チョキ', 'パー']
    print(hands[0] + 'を出しました')
            ↑
   リストhandsの0に入っているグーをもってきて、「グーを出しました」と表示される

これでルール①の内容をコンピューター君は理解してくれます。

ルール①-2:グー、チョキ、パー以外は出しちゃダメ

ここで困るのが、リストに入っている0~2以外の数字が入ったらどーするの?
そうなんですよ。コンピューター君も0~2以外の数字が入ると、
「0~2以外の数字は教えられてないので、ワカリマセン!」ってエラーを吐きます。

なので、
0~2の数字が入ったら「正しい数字ですよ」、
0~2以外の数字が入ったら「誤った数字ですよ、」
となるようにコンピューター君に教えていきます。
ただ、別にじゃんけんするにあたって、入力する数字が正しいですよって表示する必要がないので、
retrunで内容を返すような関数を作っていきます。

関数名は【validate】としておきましょうか。

def validate():

正しいか誤っているか判別するためにif文を使っていきます。
引数は、先ほど作ったhandを正しい数字か判断するので、handで教えていきます。

def validate(hand):
    if hand not in('0', '1', '2')
        return False
    else:
        return True

おっと、returnの性質上elseはいらないんでした…。

def validate(hand):
    if hand not in('0', '1', '2')
        return False
    return True

これで、0(グー)、1(チョキ)、2(パー)以外のものが入力されたら
「入力が間違ってますよー」
って分岐ができる関数ができましたね!

ルール②:じゃんけんの勝ち負けのルール


今回は、if文を使って勝ち負けの判断ができるようにしてみましょうか!
関数名は【judge】にします。

def judge():

ここからじゃんけんの条件を設定します。
引数は、自分がplayer、コンピューターはcomputerとします。
それではまず、あいこを入れていきます。

def judge(player,computer):
    if player == computer:
        return '引き分け'

あいこはplayerとcomputerが同じ手を出したときなので、「==」の条件の時とします。

ここで「引き分けでした」とprint関数で書き出しても良いのですが、コードが長くなって見づらくなってします。
なのでreturnとしてデータを返して、関数使用時にすぐ表示されないようにしておきます。

同じように、playerが勝ちになる条件を入れていきます。

def judge(player,computer):
    if player == computer:
        return '引き分け'
    elif player == 0 and computer == 1:
        return '勝ち'
    elif player == 1 and computer == 2:
        return '勝ち'
    elif player == 2 and computer == 0:
        return '勝ち'

これは、「0 → グー」「1 → チョキ」「2 → パー」で考えると、じゃんけんを知っている人ならもうお分かりですね!
player が 0(グー)で computer が 1(チョキ)のとき、playerの’勝ち’
というような感じ書かれてます。

最後に、playerが負けになる条件を入れていきます。

def judge(player,computer):
    if player == computer:
        return '引き分け'
    elif player == 0 and computer == 1:
        return '勝ち'
    elif player == 1 and computer == 2:
        return '勝ち'
    elif player == 2 and computer == 0:
        return '勝ち'
    elif player == 0 and computer == 2:
        return '負け'
    elif player == 1 and computer == 0:
        return '負け'
    elif player == 2 and computer == 1:
        return '負け'

できた!!(*^-^*)

ん?なんかおかしい?
じゃんけんはこういうルールだから全然おかしくないよ!!!!!

はい。おかしくはないです!
正しいことをきちんとコンピューター君に教えてます!
動作も正常に動いてくれます。

でも、実はもう少しコード量を減らすことができます!

じゃんけんは、あいこ、勝ち、負けしかないと考えると、
あいこでも勝ちは設定したので、あいこでも勝ちでもないときが負けとも取れますよね!
そうすると

def judge(player,computer):
    if player == computer:
        return '引き分け'
    elif player == 0 and computer == 1:
        return '勝ち'
    elif player == 1 and computer == 2:
        return '勝ち'
    elif player == 2 and computer == 0:
        return '勝ち'
    else:
        return '負け'

でもいいということですね!
こちらにするとコード量も減って、見やすくなってますね!
pythonはインデントとかの縛りがあるように、コードを見やすく書くようになってます。
最初は何が見やすいのか、どう短くすればいいのかわからないと思いますので、前者の書き方でも大丈夫です!
とにかく動かすことを目標に作ってみましょう!

今回は「コードを短くしたい」といった私の気分で、後者のコードの書き方で、コンピューター君に教えていきます。m(_ _)m

ここまでで基本的なルールを教えたので下準備は完了です!

じゃんけんゲームを作っていこう!


ここから、実際にゲームができるようにしていきます!
プラモデルだったら各パーツを作ったから、これらを組み合わせて完成させるぞー
って段階ですね!
※なんでプラモデルで例えたのか聞かないでください。なんとなくですww

それではまずは、プレイヤーに何をやるか、何を入力してほしいかを、案内します。

print('じゃんけんやろうぜ!\nあなたは何を出しますか?(0: グー, 1: チョキ, 2: パー)')

プレイヤーにその案内の内容をもとに入力してもらいます。

print('じゃんけんやろうぜ!\nあなたは何を出しますか?(0: グー, 1: チョキ, 2: パー)')
player_hand_str = input('数字で入力してください:')

ここで、プレイヤーが入力した文字が0~2に当てはまってるかをコンピューター君に診断してもらいます。
当てはまってたら次の段階へ、
当てはまってなかったら正しいもの入力してねとなるようにします。

ここで使うのがルール①-2で作ったvalidate関数です!

この関数はここで使うために作ったんだねー!
※if文内の正しい(True)時の設定はとりあえず未入力(空白)にしておきます

print('じゃんけんやろうぜ!\nあなたは何を出しますか?(0: グー, 1: チョキ, 2: パー)')
player_hand_str = input('数字で入力してください:')
if validate(player_hand_str):

else:
    print('(0: グー, 1: チョキ, 2: パー)から数字を入力してね')

input関数で受け取った文字を、変数player_hand_strに代入して、
その後validate関数で入力して、ほしい文字(0,1,2のいずれか)なのかのチェックをかけるようにしました。
これでinput関数で入力された文字が正しいか誤ってるか診断できますね!

では、if文で正しい文字が入力された(True)時の内容を設定していきましょうか!

プレイヤーの出す手が決まったので、コンピューターが出す手を決めていきます。
コンピューターがどのように出すかは、いろいろ設定できます!

例えば
1.グーしか出せないとかパーしか出せないみたいに、コンピューターの手を固定する方法
2.コンピューターが毎回ランダムで手を変える方法
3.コンピューターが絶対に勝つ、またはプレイヤーが絶対勝つ方法(遅出し的な設定ですね。性格悪ー!!)
etc…

この中で一番ゲームらしいのは、「2.コンピューターが毎回ランダムで手を変える方法」かなって思うので、
毎回ランダムで手を変える方法で設定していきます。
ランダムで数字を変えたい場合は、pythonにもともと入っているrandomモジュールを使用します。
モジュールを使う場合は、最初にimportする必要がありましたよね!

import random

print('じゃんけんやろうぜ!\nあなたは何を出しますか?(0: グー, 1: チョキ, 2: パー)')
player_hand_str = input('数字で入力してください:')
if validate(player_hand_str):
    computer_hand = random.randint(0,2)
else:
    print('(0: グー, 1: チョキ, 2: パー)から数字を入力してね')

ここまで入力したらプレイヤーが出す手を自分で選んで、コンピューターはランダムに選択されることをコンピューター君は理解してくれます。
あとは、プレイヤーとコンピューターの選んだ手がそれぞれ表示されるようになって、
勝ち負けがわかれば完成ですね!
ラストスパートです!(^^)

では、最後の設定をしていきます。
まず選んだ手が表示されるようにするには、ルール①で作ったchoice_hand関数を使えば良いですね!
input関数で受け取った文字は文字列なので、数値に型変換させます。
そのうえでプレイヤー側とコンピューター側をそれぞれ設定していきます。

print('じゃんけんやろうぜ!\nあなたは何を出しますか?(0: グー, 1: チョキ, 2: パー)')
player_hand_str = input('数字で入力してください:')
if validate(player_hand_str):
    computer_hand = random.randint(0,2)
    player_hand = int(player_hand_str)
    choice_hand(player_hand)
    choice_hand(computer_hand)
else:
    print('(0: グー, 1: チョキ, 2: パー)から数字を入力してね')

コンピューター君に前もって教えてたから、簡単ですね!(^^)

あとは、勝ちか負けの判断機能をつけるだけですね!
これもすでにルール②で作っているjudge関数を使えば簡単にできますね!

print('じゃんけんやろうぜ!\nあなたは何を出しますか?(0: グー, 1: チョキ, 2: パー)')
player_hand_str = input('数字で入力してください:')
if validate(player_hand_str):
    computer_hand = random.randint(0,2)
    player_hand = int(player_hand_str)
    choice_hand(player_hand)
    choice_hand(computer_hand)
    result = judge(player_hand,computer_hand)
    print('じゃんけんの結果は' + result + 'でした')
else:
    print('(0: グー, 1: チョキ, 2: パー)から数字を入力してね')

できたー!!
完成!!\(^o^)/\(^o^)/\(^o^)/

さっそくじゃんけんゲームをやってみましょう!
実行するのは、ターミナルで「python (保存名).py」でしたね!

じゃんけんやろうぜ!
あなたは何を出しますか?(0: グー, 1: チョキ, 2: パー)
数字で入力してください:2
パーを出しました
チョキを出しました
じゃんけんの結果は負けでした

なんとかじゃんけんしてくれてますね。
まぁさっくり作っただけあって、改善の余地はたくさんありますけど!

ちなみに、0~2以外の文字を入れてみましょうか!
ちゃんともう一回入力してねってなるかなー?

じゃんけんやろうぜ!
あなたは何を出しますか?(0: グー, 1: チョキ, 2: パー)
数字で入力してください:4
(0: グー, 1: チョキ, 2: パー)から数字を入力してね

・・・おや?
間違ってることは教えてくれたけど、終わってしまいました。
もう一度実行しないとゲームができないですね。。
入力間違えるたびに、またゲームを実行しないといけないなんて、なんて不便なゲームだ!!
ってなりそうですね。(^^;
私も毎回「python (保存名).py」をターミナルに打ち込みたくありません!
※コピーして貼り付けろよって話なんですが。。。

ここはじゃんけんが終わるまで続くように直しておきますか。

間違った数字を入力されている限り、ループするようにしたいので、while文を使ってみましょうか!
while文をいれる場所は、文字を入力してもらうところからループで表示されたいので、inputで文字をる受け取る前に入れましょうかね!

print('じゃんけんやろうぜ!\nあなたは何を出しますか?(0: グー, 1: チョキ, 2: パー)')
while True:
    player_hand_str = input('数字で入力してください:')
    if validate(player_hand_str):
        computer_hand = random.randint(0,2)
        player_hand = int(player_hand_str)
        choice_hand(player_hand)
        choice_hand(computer_hand)
        result = judge(player_hand,computer_hand)
        print('じゃんけんの結果は' + result + 'でした')
        break
    else:
        print('(0: グー, 1: チョキ, 2: パー)から数字を入力してね')

これで、正しい数字が入力されるまで繰り返し入力できるようになりましたね!

じゃんけんやろうぜ!
あなたは何を出しますか?(0: グー, 1: チョキ, 2: パー)
数字で入力してください:4
(0: グー, 1: チョキ, 2: パー)から数字を入力してね
数字で入力してください:2
パーを出しました
パーを出しました
じゃんけんの結果は引き分けでした

間違った文字いれても続くようになりましたね!(^^)
でも、あいこで終わるとは・・・
じゃんけんはあいこの場合もう一回出すんだけど、今回は入門編なので、このくらいにしておきましょう。。
決して面倒くさくなったわけじゃないですよ!
入門編じゃなくなっちゃうからやめるんですからね!
もう一度書きます!

決して面倒くさくなったわけじゃないですよ!!

自分なりに考えて改変、作成してみよう

今回if文を中心にじゃんけんゲームを作っていきましたが、他にも作り方はいろいろあります。
じゃんけんの勝ち負け判定をif文を使わず、辞書型を使って判定するってやり方もあります。

ゲームの内容も、上記でも書いたように
あいこでも続くようにしたり、
最初に自分の名前を入力してどっちがどの手をだしたかわかりややすくしたり、
一度のじゃんけんで終わらないようにしたりなど、
書くコード次第で変更できます。

といっても、最初はどのようなコードの書き方がいいかわからないかと思いますので、
自分の思いつくやり方でちょっとしたゲームを作っていったら、少しずつ成長していくかと思います。

この機能つけるには、この関数使えるなぁーとか
こんなふうに関数作れば、このゲームで使えるなぁーとか
思い浮かべながら、今後勉強していくと、少しずつプログラミングが楽しくなっていくんじゃないかと私は思ってます!
私自身、そうでしたから!(*^-^*)

今回作成したじゃんけんゲームはあくまで作成例の1つなので、
実際にアプリを作る入口みたいな感じで参考にしていただけたら幸いです!

じゃんけん一つとっても、もっといいコードの書き方もたくさんあると思うので、
みなさんもオリジナルのゲームを作ってみてはいかがでしょうか!(^^)



プログラミング初心者向け動画!【エコーズラインプログラミング】

Leave A Reply

*
*
* (公開されません)

相談などはこちら

相談などはこちら

オリジナルで曲やPVを作ってみたいという方、お気軽にご相談下さい♪ グッズはなんと1つから受注生産可能です!(たとえば、試しに自分の写真を素材としたスマホケースを1つだけ作るなど)

Recommended

More