ヒット&ブロー in Python
Python 仲間の sin さんが、プログラムを作ったので、許可を得て公開することにした。小さなプログラムだけど、ゲームの桁数を選べるようになっている。この拡張はぼくが行った。人のふんどしで相撲を取るとはこういうことかな。
遊び方は、ヒット&ブローがどういうものか知っていれば、プログラムを実行すればメッセージを出しているのでわかると思う。暇な人がいたら、遊んでみてください。
# ------------------------------------------------------
# ヒット&ブロー プログラム(hitblow.py)
# オリジナル : sin
# アレンジ : mazin
# ------------------------------------------------------
def makeanswer(length):
# 異なる(length)桁の数字を作る / 返値は(length)桁の数字配列
import random
answer = []
while len(answer) < length:
m = str(random.randint(0,9))
if m not in answer: answer.append(m)
return answer
def checknum(n, length):
# 入力された数字のチェック / n は数字文字列
n = list(n)
if len(n) != length: return "error length"
if max([n.count(i) for i in n]) > 1: return "error overlap"
return True
def jugement(n, answer, length):
# 入力された数字の判定 / n は入力数字文字列、answer は正解数字配列
n = list(n)
hit = 0
blow = 0
for x in range(length):
if n[x] == answer[x]: hit += 1
elif n[x] in answer: blow += 1
return [hit, blow]
# ヒット&ブロー メインプログラム
if __name__ == "__main__":
trial = 1
while True:
try: length = int(input("何桁の数字で遊びますか: "))
except: print("エラー:不正な入力です"); continue
if length >= 1 and length <=10: break
print("エラー:桁数は1桁以上10桁以下です")
continue
answer = makeanswer(length)
while True:
n = str(input(str(length) + "桁の数字を入力してください " + str(trial) + "回目: "))
if checknum(n, length) == "error length":
print("エラー:数字は" + str(length) + "桁です")
continue
if checknum(n, length) == "error overlap":
print("エラー:同じ数字は使えません")
continue
hit, blow = jugement(n, answer, length)
if hit == length:
print("大正解")
break
print(str(hit)+"ヒット" + " " + str(blow)+ "ブロー")
trial += 1
print("おめでとうございます! 入力回数は", trial, "回でした。")
# ------------------------------------------------------
(以上)