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

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

####環境: Google Colaboratory
####条件：
じゃんけんルールに従う。
先に2勝した方が勝ち。

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

```python
from random import randint
import time
```

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

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

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

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

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

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

```Python
    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カウント

```python
    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文で処理され、入ることになります。


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

**まとめ**

```python
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('「３勝で、あなたの勝ち。Yes, You are winner !」')
        break
    if lose == 2:
        print('対戦結果は****？？？')
        time.sleep(3)
        print('「３敗で、あなたの負け。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引き分け
対戦結果は****？？？
「３敗で、あなたの負け。Yes, You are loser !」
```

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