progateとPyQを使ってPythonの基礎とをマスターした、つもりのmemowoです。
早速何か成果物を作ってみたくてウズウズしていたので↓の本を購入してコードを書いてみました。
簡単なものですがやってみるとハマってしまい、他サイトの情報も参考にエラーが起きない様抜け漏れの無いコードになっていると思います。
「ゲーム作りで学ぶPython」の中でも、一番最初の項目で出てくるコードで見てくれる人がいるのかどうか分からないのですが、折角作ったのでメモしておきます。
参考記事:
【Python入門編】for文を徹底解析〜繰り返し処理やrange関数の利用〜
【Python入門編】if文(フロー制御文)の使い方を細かくメモしていく
変数、for文、if文、for文、簡単な組み込み関数など、
ここらへんを抑えていれば、このゲームはつくれます。
Pythonじゃんけんプログラムのゴールはこれです。
ユーザーの手(グー、チョキ、パー)を入力させて、コンピューターはランダムに手を決め勝負させます。
ここではif文を結構多様してます。randomモジュールもちょっとだけ使ってます。あと、関数も使ってます。
if文さえ分ってしまえば簡単なじゃんけんゲームは作れてしまい、ちょっと凝ってみると関数だったりが必要になってくる感じです。
という事で、以下このゴールに至った過程を追ってメモしていきます!
もくじ

input(“あなたの手は?”)でユーザーに手を入力してもらうプログラムを作ります。
これで、ユーザーの手入力は完成。
※str.format()など、忘れない様にPyQで習った文法もガンガン使っていってます。

randomモジュールをインポートして、random.randint(1,3)でコンピューターの手をランダムに決めます。(1:グー、2:チョキ、3:パーとします。)

あとはユーザーがグーを出した場合、チョキを出した場合、グーを出した場合で条件分岐させ、勝敗判定をつければ、一旦完成です。

同じ「グー」でも「ぐー」と入力されたら判定できなくなってしまいます。
なので、コンピューターと同じ様に数字で入力してもらう様に3行目から変更していきます。

ジャンケン判定の条件分岐も「if i == “グー”」から「if i == 1」へ変更します。
import random
#関数にまとめる
def janken():
i = int(input("あなたの手は?(1:グー 2:チョキ 3:パー 0:終わり)=>"))
#vが0だった場合、ここでジャンケンを終了させる
if i == 0:
print("これでジャンケンを終わります")
return i
ih = "グー"
if i == 2:
ih = "チョキ"
if i == 3:
ih = "パー"
print("あなたの手は{}です".format(ih))
c = random.randint(1,3)
ch = "グー"
if c == 2:
ch = "チョキ"
if c == 3:
ch = "パー"
print("コンピューターの手は",ch,"です")
if i == 1:
if c == 1:
print("あいこ")
elif c == 2:
print("勝ち")
else:
print("負け")
elif i == 2:
if c == 1:
print("負け")
elif c == 2:
print("あいこ")
else:
print("負け")
else:
if c == 1:
print("勝ち")
elif c == 2:
print("負け")
else:
print("あいこ")
return i
#0~3以外であればvは何でもOK
v = 100
#vが0にならない限りジャンケンを続ける
while v != 0:
v = janken()
(ちょっとコードが長くなってしまい、キャプチャでは収まらなくなってしまいました。。)
今までのジャンケンの動きを関数にまとめます。
で、変数vに0~3以外の適当な数字を入れ、while文で0にならない限りジャンケンモジュールを何回も繰り返させる様にしました。

このままだと、0〜3以外の数字を入力すると、全部「グー」判定になってしまいます。
def janken():
i = int(input("あなたの手は?(1:グー 2:チョキ 3:パー 0:終わり)=>"))
if i == 0:
print("これでジャンケンを終わります")
return i
#1〜3以外だと選び直させるコード
if not 0 < i <=gu- 3:
print("0~3の数字を選んでください")
return i
ih = "グー"
if i == 2:
ih = "チョキ"
if i == 3:
ih = "パー"
print("あなたの手は{}です".format(ih))
if not 0 < i < 3: で0~3以外の数字が入力された場合、選びなおす分岐を追加します。
このままでは文字列を入力されてしまったら、エラーでプログラムが止まってしまいますので、
def janken():
i = input("あなたの手は?(1:グー 2:チョキ 3:パー 0:終わり)=>")
if i.isdigit():
i = int(i)
else:
print("1~3の数字を入力してください!!")
return 5
if i == 0:
print("これでジャンケンを終わります")
return i
if not 0 < i <= 3:
print("0~3の数字を選んでください")
return i
最後に入力された値が文字列か数字かを判別する、str.isdigit()メソッドを追加して完成です!
import random
def janken():
i = input("あなたの手は?(1:グー 2:チョキ 3:パー 0:終わり)=>")
if i.isdigit():
i = int(i)
else:
print("1~3の数字を入力してください!!")
return 5
if i == 0:
print("これでジャンケンを終わります")
return i
if not 0 < i <= 3:
print("0~3の数字を選んでください")
return i
ih = "グー"
if i == 2:
ih = "チョキ"
if i == 3:
ih = "パー"
print("あなたの手は{}です".format(ih))
c = random.randint(1,3)
ch = "グー"
if c == 2:
ch = "チョキ"
if c == 3:
ch = "パー"
print("コンピューターの手は",ch,"です")
if i == 1:
if c == 1:
print("あいこ")
elif c == 2:
print("勝ち")
else:
print("負け")
elif i == 2:
if c == 1:
print("負け")
elif c == 2:
print("あいこ")
else:
print("負け")
else:
if c == 1:
print("勝ち")
elif c == 2:
print("負け")
else:
print("あいこ")
return i
v = 100
while v != 0:
v = janken()
完成したコードをめもしておきます。
我ながら、滅茶苦茶長い・・・苦笑
今後「ゲーム作りで学ぶPython」を含め、学習を進めていくにつれて、短く美しいコードがかける様になれればいいかな!! と言うことで今回のメモはここで終わります。