LoginSignup
0
1

More than 3 years have passed since last update.

簡単じゃんけんプログラム

Posted at

Python学習の一環として、PCと対戦するじゃんけんプログラムを作ってみました。
While文、if文使う基本要素が入っているので、非常に勉強になります。

環境: Google Colaboratory

条件:

じゃんけんルールに従う。
先に2勝した方が勝ち。

① 乱数を読み込む為、randomモジュールのrandint関数入れる。タイムモジュールも読み込む。

from random import randint
import time

② じゃんけんで出すそれぞれの手をhandsという変数に代入し、あいこ、負け、勝ちという3つの結果をrulesという変数に代入

hands = ['グー', 'チョキ', 'パー']
rules = ['あいこ', '負け', '勝ち']
win = 0
lose = 0
draw = 0
print('***じゃんけんゲームスタート!***')

③ ある条件が達成されるまで処理を繰り返すようにしたい為、While Trueで無限ループを作る。

while True:

④ Player側の処理を書いていきます。
Player側
0:グー 1:チョキ 2:パーの選択肢を設け、出力する。inputで入力欄設け、'あなたは何を出しますか??'に対し、数字を入力すると、入力された数字は文字列なので、数値に変換する必要があります。int型で数値に変換、pという変数に代入する。

    print('0:グー 1:チョキ 2:パー')
    p = int(input('あなたは何を出しますか??'))
    #hands変数から上のp変数を入れてあげる
    print('あなたは,' + hands[p] + 'を出す')
    #上の処理を1秒止め、対戦形式に近い形にする。
    time.sleep(1)

⑤ PC側の処理を書いていきます。
PC側
randomモジュールのrandintからランダムに('0:グー 1:チョキ 2:パー')の0~2までの値を取得し、変数mに代入する。変数pに入れた数字を使って、上記のhands変数よりじゃんけんの手を出力する。time.sleep関数を使い、1秒間を間を空ける形にする為、time.sleep(1)で対戦形式に近い形にする。

    m = randint(0,2)
    print('PCは,' + hands[m] + 'を出す')
    time.sleep(1)

⑥ 勝敗プログラム

Playerが出した数字の変数pとPCが出した数字の変数mの数を引いて、3で割った余りで判定。マイナスが出ても判定できるよう余りが出力する% 代数演算子使う。じゃんけんプログラムに於いて、ココがキモになります。
例:
p:1(チョキ)-m:2(パー)  勝ち  -1%3=余り2 elseの条件でwin
p:2(チョキ)-m:2(パー) あいこ  0%3=余り0 if条件でdraw
p:2(パー)-m:1(チョキ) 負け   1%3=余り1 elif条件でlose
p:0(グー)-m:1(チョキ) 勝ち   -1%3=余り2 elseの条件でwin
p:0(グー)-m:0(グー)  あいこ  0%3=余り0 if条件でdraw
p:1(チョキ)-m:0(グー) 負け   1%3=余り1 elif条件でlose

上記の考えを表したのが下記のコードになります。pからmを引いた数字を3で割り、余りを出力。0の場合は引き分けにて1カウント、1の場合は1カウント、elseで2の場合も1カウント

    i = (p-m) % 3
    print(rules[i])
    if i == 0:
    #drawの場合+1でカウント
        draw = draw +1
    elif i == 1:
    #loseの場合+1でカウント
        lose = lose +1
    else:
    #winの場合+1でカウント
        win = win +1
    time.sleep(1)

⑦ 出力プログラム

上記で記載した下の変数より、format文を使って文字列に置き換えるます。
win = 0
lose = 0
draw = 0
これらの変数をformat文を使って文字列に置き換えるという意味になります。
それぞれの{}は、win, lose, drawの中に入った数字がformat文で処理され、入ることになります。

 print('{}勝/{}負/{}引き分け'.format(win, lose, draw))
    #winに入った数字が2に達したら、勝ちにして、breakでWhileを抜ける。
    if win == 2:
        print('対戦結果は****???')
        time.sleep(3)
        print('「3勝で、あなたの勝ち。Yes, You are winner !」')
        break
    #loseに入った数字が2に達したら、負けにして、breakでWhileを抜ける。
    if lose == 2:
        print('対戦結果は****???')
        time.sleep(3)
        print('「3敗で、あなたの負け。Yes, You are loser !」')
        break
    time.sleep(1)

まとめ

from random import randint
import time

hands = ['グー', 'チョキ', 'パー']
rules = ['あいこ', '負け', '勝ち']
win = 0
lose = 0
draw = 0

print('***じゃんけんゲームスタート!***')

while True:
    print('0:グー 1:チョキ 2:パー')
    p = int(input('あなたは何を出しますか??'))
    print('あなたは,' + hands[p] + 'を出す')
    time.sleep(1)

    m = randint(0,2)
    print('PCは,' + hands[m] + 'を出す')
    time.sleep(1)

    i = (p-m) % 3
    print(rules[i])
    if i == 0:
        draw = draw +1
    elif i == 1:
        lose = lose +1
    else:
        win = win +1
    time.sleep(1)

    print('{}勝/{}負/{}引き分け'.format(win, lose, draw))
    if win == 2:
        print('対戦結果は****???')
        time.sleep(3)
        print('「3勝で、あなたの勝ち。Yes, You are winner !」')
        break
    if lose == 2:
        print('対戦結果は****???')
        time.sleep(3)
        print('「3敗で、あなたの負け。Yes, You are loser !」')
        break
    time.sleep(1)

出力結果

***じゃんけんゲームスタート!***
0:グー 1:チョキ 2:パー
あなたは何を出しますか??0
あなたは,グーを出す
PCは,グーを出す
あいこ
0勝/0負/1引き分け
0:グー 1:チョキ 2:パー
あなたは何を出しますか??1
あなたは,チョキを出す
PCは,パーを出す
勝ち
1勝/0負/1引き分け
0:グー 1:チョキ 2:パー
あなたは何を出しますか??1
あなたは,チョキを出す
PCは,グーを出す
負け
1勝/1負/1引き分け
0:グー 1:チョキ 2:パー
あなたは何を出しますか??2
あなたは,パーを出す
PCは,チョキを出す
負け
1勝/2負/1引き分け
対戦結果は****???
「3敗で、あなたの負け。Yes, You are loser !」

じゃんけんには負けてしまいましたが、うまくプログラムが可動しました。今回のプログラムでWhile文、if文について理解が進みました。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1