# -*- coding: utf-8 -*-
"""
接待ジャンケンと勝敗表示（プログラム）
"""
# これは，難易度３を達成するプログラムのソースコードです．


import random


def main():
    # ジャンケンの手を予めlistで用意するとスッキリ
    HAND_STR_JP = ["グー", "チー", "パー", "合計"]
    # ついでに勝敗の表示文字列もlistで用意
    DWL_STR_JP  = ["あいこです", "あなたの勝ちです", "あなたの負けです"]
    dwl_usr_num = [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]  # あいこ，勝ち，負け，の記録用
    hand_dif    = 1   # 手の差（あいこ判定にも利用）
    hand_total  = 3
    hand_last   = -1  # 直前の手
    hand_trans  = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]  # 手の遷移


    while True:
        # あいこの際は掛け声が変わる（Trueなら1，Falseなら0）
        print(("どの手を出しますか", "あいこで")[hand_dif == 0])
        # 入力された整数がHAND_STRのインデックスに対応するよう調整
        hand_usr = int(input("グー(1)、チー(2)、パー(3)、おわり(0)：")) - 1
        print()  # 採点の都合上の空行

        # 入力された整数が0以下なら終了，2より大きいなら再入力
        if hand_usr < 0:
            break
        elif hand_usr > 2:
            continue

        # あいこの際は掛け声が変わる（Trueなら1，Falseなら0）
        print(("ジャンケン", "しょ")[hand_dif == 0])

        # 乱数を用いて「勝ち負け＝数値化した手の差」を決定
        win_lose = random.random()
        if   win_lose < 0.5:
            hand_dif = 1
        elif win_lose < 0.75:
            hand_dif = 2
        else:
            hand_dif = 0

        # 「ＣＰＵの手」は和の剰余で算出
        hand_cpu = (hand_usr + hand_dif) % 3

        # 勝敗の記録を更新
        dwl_usr_num[hand_usr][hand_dif] += 1
        dwl_usr_num[hand_total][hand_dif] += 1
        if hand_last >= 0:
            hand_trans[hand_last][hand_usr] += 1
        hand_last = hand_usr

        # 結果の表示
        print("ＣＰＵ：", HAND_STR_JP[hand_cpu])
        print("あなた：", HAND_STR_JP[hand_usr])
        print()  # 空行

        if hand_dif == 0:
            continue
        print(DWL_STR_JP[hand_dif])
        win_rate = int(dwl_usr_num[hand_total][1] * 100 / (dwl_usr_num[hand_total][1] + dwl_usr_num[hand_total][2]))
        print(f"あなたの {dwl_usr_num[hand_total][1]} 勝 {dwl_usr_num[hand_total][2]} 敗 {dwl_usr_num[hand_total][0]} 分で、勝率 {win_rate} ％ですね")

    print("\n手ごとの勝敗表")
    print(" 手  | 勝ち | 負け |あいこ|")
    for hand_last, dwl_raw in zip(HAND_STR_JP, dwl_usr_num):
        print(f"{hand_last} |{dwl_raw[1]:5d} |{dwl_raw[2]:5d} |{dwl_raw[0]:5d} |")

    print("\n手の遷移表")
    print("　　　　 |      出した手      |")
    print("直前の手 | グー | チー | パー |")
    for hand_last, trans_raw in zip(HAND_STR_JP[0:3], hand_trans):
        print(f"  {hand_last}   |" + "".join([f"{i:5d} |" for i in trans_raw]))

    input("\nEnterを押してプログラムを完全終了")


if __name__ == "__main__":
    main()
