本やUdemy、Progateなどを用いてPythonやhtml、cssの学習過程を残していきます。

【Python入門】初心者でも簡単にできるじゃんけんゲームの作り方

python_プログラミング

progateとPyQを使ってPythonの基礎とをマスターした、つもりのmemowoです。

早速何か成果物を作ってみたくてウズウズしていたので↓の本を購入してコードを書いてみました。


簡単なものですがやってみるとハマってしまい、他サイトの情報も参考にエラーが起きない様抜け漏れの無いコードになっていると思います。

「ゲーム作りで学ぶPython」の中でも、一番最初の項目で出てくるコードで見てくれる人がいるのかどうか分からないのですが、折角作ったのでメモしておきます。

参考記事:

【Python入門編】for文を徹底解析〜繰り返し処理やrange関数の利用〜

【Python入門編】組み込み関数の使い方メモ

【Python入門編】変数の使い方を詳しくメモしていく

【Python入門編】if文(フロー制御文)の使い方を細かくメモしていく

変数、for文、if文、for文、簡単な組み込み関数など、

ここらへんを抑えていれば、このゲームはつくれます。

Pythonじゃんけんプログラムのゴールはこれです。

ユーザーの手(グー、チョキ、パー)を入力させて、コンピューターはランダムに手を決め勝負させます。

ここではif文を結構多様してます。randomモジュールもちょっとだけ使ってます。あと、関数も使ってます。

if文さえ分ってしまえば簡単なじゃんけんゲームは作れてしまい、ちょっと凝ってみると関数だったりが必要になってくる感じです。

という事で、以下このゴールに至った過程を追ってメモしていきます!

ユーザーの手を決める(input())

input()の使い方

input(“あなたの手は?”)でユーザーに手を入力してもらうプログラムを作ります。

これで、ユーザーの手入力は完成。

※str.format()など、忘れない様にPyQで習った文法もガンガン使っていってます。

コンピューターの手を決める(randomモジュール)

dandomなコンピュータの手

randomモジュールをインポートして、random.randint(1,3)でコンピューターの手をランダムに決めます。(1:グー、2:チョキ、3:パーとします。)

あとはユーザーがグーを出した場合、チョキを出した場合、グーを出した場合で条件分岐させ、勝敗判定をつければ、一旦完成です。

細かい調整をしていく

ユーザーの入力を数字に変更

自分の手も数字で入力

同じ「グー」でも「ぐー」と入力されたら判定できなくなってしまいます。

なので、コンピューターと同じ様に数字で入力してもらう様に3行目から変更していきます。

コンピューターの判定を変更

ジャンケン判定の条件分岐も「if i == “グー”」から「if i == 1」へ変更します。

ジャンケンを永遠に続けられる様にする

import random

#関数にまとめる
def janken():
    i = int(input("あなたの手は?(1:グー 2:チョキ 3:パー 0:終わり)=>"))

#vが0だった場合、ここでジャンケンを終了させる
    if i == 0:
        print("これでジャンケンを終わります")
        return i

    ih = "グー"
    if i == 2:
        ih = "チョキ"
    if i == 3:
        ih = "パー"
    print("あなたの手は{}です".format(ih))

    c = random.randint(1,3)
    ch = "グー"
    if c == 2:
        ch = "チョキ"
    if c == 3:
        ch = "パー"

    print("コンピューターの手は",ch,"です")

    if i == 1:
        if c == 1:
            print("あいこ")
        elif c == 2:
            print("勝ち")
        else:
            print("負け")
    elif i == 2:
        if c == 1:
            print("負け")
        elif c == 2:
            print("あいこ")
        else:
            print("負け")
    else:
        if c == 1:
            print("勝ち")
        elif c == 2:
            print("負け")
        else:
            print("あいこ")
    return i

#0~3以外であればvは何でもOK
v = 100

#vが0にならない限りジャンケンを続ける
while v != 0:
    v = janken()

(ちょっとコードが長くなってしまい、キャプチャでは収まらなくなってしまいました。。)

今までのジャンケンの動きを関数にまとめます。

で、変数vに0~3以外の適当な数字を入れ、while文で0にならない限りジャンケンモジュールを何回も繰り返させる様にしました。

0~3以外の数字を入力された場合の対処を追加

0~3以外の数字の場合

このままだと、0〜3以外の数字を入力すると、全部「グー」判定になってしまいます。

def janken():
    i = int(input("あなたの手は?(1:グー 2:チョキ 3:パー 0:終わり)=>"))
    if i == 0:
        print("これでジャンケンを終わります")
        return i

#1〜3以外だと選び直させるコード
    if not 0 < i <=gu- 3:
        print("0~3の数字を選んでください")
        return i

    ih = "グー"
    if i == 2:
        ih = "チョキ"
    if i == 3:
        ih = "パー"
    print("あなたの手は{}です".format(ih))

if not 0 < i < 3: で0~3以外の数字が入力された場合、選びなおす分岐を追加します。

入力されたiが文字列か数字かを判別する

このままでは文字列を入力されてしまったら、エラーでプログラムが止まってしまいますので、

def janken():
    i = input("あなたの手は?(1:グー 2:チョキ 3:パー 0:終わり)=>")
    if i.isdigit():
        i = int(i)
    else:
        print("1~3の数字を入力してください!!")
        return 5

    if i == 0:
        print("これでジャンケンを終わります")
        return i

    if not 0 < i <= 3:
        print("0~3の数字を選んでください")
        return i

最後に入力された値が文字列か数字かを判別する、str.isdigit()メソッドを追加して完成です!

まとめ

import random

def janken():
    i = input("あなたの手は?(1:グー 2:チョキ 3:パー 0:終わり)=>")
    if i.isdigit():
        i = int(i)
    else:
        print("1~3の数字を入力してください!!")
        return 5

    if i == 0:
        print("これでジャンケンを終わります")
        return i

    if not 0 < i <= 3:
        print("0~3の数字を選んでください")
        return i

    ih = "グー"
    if i == 2:
        ih = "チョキ"
    if i == 3:
        ih = "パー"
    print("あなたの手は{}です".format(ih))

    c = random.randint(1,3)
    ch = "グー"
    if c == 2:
        ch = "チョキ"
    if c == 3:
        ch = "パー"

    print("コンピューターの手は",ch,"です")

    if i == 1:
        if c == 1:
            print("あいこ")
        elif c == 2:
            print("勝ち")
        else:
            print("負け")
    elif i == 2:
        if c == 1:
            print("負け")
        elif c == 2:
            print("あいこ")
        else:
            print("負け")
    else:
        if c == 1:
            print("勝ち")
        elif c == 2:
            print("負け")
        else:
            print("あいこ")
    return i

v = 100
while v != 0:
    v = janken()

完成したコードをめもしておきます。

我ながら、滅茶苦茶長い・・・苦笑

今後「ゲーム作りで学ぶPython」を含め、学習を進めていくにつれて、短く美しいコードがかける様になれればいいかな!! と言うことで今回のメモはここで終わります。

この記事を書いた人

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です