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」を含め、学習を進めていくにつれて、短く美しいコードがかける様になれればいいかな!! と言うことで今回のメモはここで終わります。