目次
はじめに
プログラミングが初めてなので、何とか形にだけしました。
エンジニアにアドバイスを頂きながら、本と検索で頑張りました。
参考になりませんが、需要あれば説明も書こうかなと。
製作手順は初めにじゃんけんの判定だけを作りました。
次に二人だけのじゃんけんを作ってから勝者表示、変数を入れつつ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))
コメントや質問募集中