前提
pythonでテンパズル(四つの数字を四則演算を用いて =10になる式を考えるパズルゲーム)を作ろうとしています。
実現したいこと
1.ランダムな四つの数字を生成する
2.1で生成した数字と四則演算を用いて=10になるような式を作る
3.プレイヤーに答えの式を入力してもらう
4.2と3が一致していれば正解と表示する
発生している問題・エラーメッセージ
2で生成された複数の式の中に、プレイヤーが3で入力した式と一致するものがあるか否かを確認するコードが分からない。
正解の式を入れても 間違い! と表示される。
Python
1import random #4つの数字を生成 2num_1=random.randint(0,9) 3num_2=random.randint(0,9) 4num_3=random.randint(0,9) 5num_4=random.randint(0,9) 6num = str(num_1) + str(num_2) + str(num_3) + str(num_4) 7 8#答えの生成 9import itertools 10import sys 11 12def is_make10(num): 13 14 #生成した4つの数字の順番の組み合わせ 15 nums = [x for x in itertools.permutations(num)] 16 17 #符号の組み合わせ 18 opers = set([y for z in itertools.combinations_with_replacement("+-*/",3) 19 for y in itertools.permutations(z,3)]) 20 21 #計算式パターンのモデル 22 models =["({a}{x}{b}){y}({c}{z}{d})", 23 "(({a}{x}{b}){y}{c}){z}{d}", 24 "{a}{x}({b}{y}({c}{z}{d}))", 25 "({a}{x}({b}{y}{c})){z}{d}", 26 "{a}{x}(({b}{y}{c}){z}{d})"] 27 28 29 #テンパズルを作れるか調査 30 for num in nums: 31 for oper in opers: 32 for model in models: 33 try: 34 tmp=model.format(a = num[0], b = num[1], 35 c = num[2],d = num[3], 36 x = oper[0],y = oper[1], 37 z = oper[2]) 38 if eval(tmp) == 10: 39 list_box.append(tmp) 40 41 42 #0で割った時のエラー回避 43 except ZeroDivisionError: 44 continue 45 46#テンパズルを作れた計算式を格納する配列 47list_box = [] 48 49is_make10(num) 50 51if len(list_box) == 0: 52 print("不可能な数字が生成されました。") 53 54else: 55 print("テンパズルの候補を表示します。") 56 print(set(list_box)) 57 58 59kotae=input() 60if kotae in (list_box): 61 print("正解!") 62else: 63 print('間違い!')
試したこと
60行目で ifを使ってみましたがうまくいっていないようです
補足情報
学校の課題なので google colabotoryを使っています。
回答1件