質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

440閲覧

テンパズルの作り方:入力された答えが、生成してlistの中に入れた複数の答えの中に同じものがあるか確認する方法。

pinata

総合スコア1

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2023/01/28 13:11

前提

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を使っています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2023/01/28 13:35 編集

> 正解の式を入れても 間違い! と表示される。 出力例を質問に追記いただけませんか?(print(set(list_box))の出力結果とユーザー入力)
pinata

2023/01/28 13:52

今起動したところなぜかうまくいきました、わざわざお声をかけてくださったところ申し訳ありません、ありがとうございました。
guest

回答1

0

自己解決

再起動したところうまくいきました。

投稿2023/01/28 13:54

pinata

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問