MENU

未経験者がPythonで「じゃんけん」プログラムを作ってみた

プログラミング
目次

はじめに

プログラミングが初めてなので、何とか形にだけしました。
エンジニアにアドバイスを頂きながら、本と検索で頑張りました。
参考になりませんが、需要あれば説明も書こうかなと。


製作手順は初めにじゃんけんの判定だけを作りました。
次に二人だけのじゃんけんを作ってから勝者表示、変数を入れつつCPUの人数を選べるようにしました。
何回もprintで試し、エラーも大量でした。

「Python」じゃんけんのコード

最低限じゃんけんが成立する
CPUの人数2~9人など複数人選べるようにする
自分の手を出していく
最後勝者が表示される

from operator import le
import random


member = []
member_2 = []
hand_syurui = ["グー","チョキ","パー"]
hikiwake_hantei = 0

# 自分用の関数
def zibun_set():
    if zibun.hantei == True:
        while True:
            zibun_te = int(input("数字で入力してね{0:グー,1:チョキ,2:パー}⇒"))
            if 0 <= zibun_te <3:
                break
            else:
                print("半角英数字の0~2で入力")
        zibun.hand = hand_syurui[zibun_te]
        minna_te.append(zibun.hand)
        member.append(zibun)

# (名前,手の種類,Trueは生き残りFalssは負け)
class User:
    def __init__(self,set_name,set_hand,set_hantei):
        self.name = set_name
        self.hand = set_hand
        self.hantei = set_hantei
        
    def print_data(self):
        print("名前は「{}」。出した手が「".format(self.name) + self.hand + "」")

# 自分の設置
zibun = User("自分",hand_syurui[0],True)
# 人数決める
var_list = []
while True:
    player = input("CPU人数を2~9で入力してください")
    int_player = int(player)
    if 1< int_player <10:
        break
    else:
        print("半角英数字の2~9で入力")
# 一度文字列としてプレイヤーを入れるリストを作る
for i in range(1,int_player+1):
    var_list.append("cpu"+str(i))
# var_listを変数にする
for i in range(len(var_list)):
    var_name = var_list[i]
    member.append(exec('{} = 0'.format(var_name)))
# メンバーにオブジェクトを追加
for i,j in enumerate(member):
    j = User("CPU"+str(i+1),hand_syurui[random.randint(0,2)],True)
    # member_2に全員のオブジェクトデータ保存
    member_2.append(j)

#hanteiのTrueが一つになるまでループする 
ikinokori_kazu = 0
while 1 != ikinokori_kazu:
    print("じゃんけんぽん")
    ikinokori_kazu = 0
    hikiwake_hantei = 0
    #引き分けの時ループする
    while 0 == hikiwake_hantei:
        member = []
        minna_te = []
        # 自分の入力
        zibun_set()
        # CPU
        for i in member_2:
            if i.hantei == True:
                i.hand = hand_syurui[random.randint(0,2)]
                member.append(i)
                minna_te.append(i.hand)
            # 見やすく表示
        member_kazu = len(member)
            # 見やすく表示print_dataバージョン
        for i in range(0,member_kazu):
                member[i].print_data()
            # 引き分け
        if (len(set(minna_te))) == 1:
                print("あいこ!引き分け1種")
        elif (len(set(minna_te))) == 3:
                print("あいこ!引き分け3種")
        else:
            hikiwake_hantei += 1

    make = []
    hikiwake = []
    hitorime_make = 0
    for i in range(1,len(set(member))):
        # 1人目とmember[i]人目判定
        if member[0].hand == "グー":
            if member[i].hand == "グー":
                hikiwake.append(member[i])
            elif member[i].hand == "チョキ":
                make.append(member[i])
            elif member[i].hand == "パー":
                make.append(member[0])
                hitorime_make += 1
        elif member[0].hand == "チョキ":
            if member[i].hand == "チョキ":
                hikiwake.append(member[i])
            elif member[i].hand == "パー":
                make.append(member[i])
            elif member[i].hand == "グー":
                make.append(member[0])
                hitorime_make += 1
        elif member[0].hand == "パー":
            if member[i].hand == "パー":
                hikiwake.append(member[i])
            elif member[i].hand == "グー":
                make.append(member[i])
            elif member[i].hand == "チョキ":
                make.append(member[0])
                hitorime_make += 1

    #一人目負けた時、hikiwakeのhanteiをFalseにする。
    if 0 < hitorime_make:
        member[0].hantei = False
        if 0 < len(hikiwake):
            for i in hikiwake:
                i.hantei = False

    # makeのhanteiをFalseにする。
    for i in make:
        i.hantei = False
    
    for i in member:
        if i.hantei == True:
            ikinokori_kazu += 1
# 確認用
    # for i in range(0,member_kazu):
    #     print(vars(member[i]))

syouri = []
for i in member:
    if i.hantei == True:
        syouri.append(i)
print("勝者「{}」。".format(syouri[0].name))
プログラミング

この記事が気に入ったら
フォローしてね!

シェアして頂けると嬉しいです。

コメントや質問募集中

コメントする

目次