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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

3回答

289閲覧

if分の条件の単純化

12tenten31

総合スコア14

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2018/07/11 02:39

pythonでの疑問というより知恵を貸してほしい質問になります

配列para[5]にキーボード入力で0から30までの好きな整数を入力し、その数字の組み合わせによって結果を表示したいのです

そこでpara[1]とpara[3]が同程度(差が3で考えています)でかつpara[0] para[2] para[4]が同程度(差が3)でBDペアがACEに対して相対的に高い(差が6程度)組み合わせの時に「M型」という結果を表示したいとします

今は、配列を並び替えて最大と最小の差とすべての数字の大小関係、並び替えから1番大きいものと2番目がpara[1]para[3]にあるのかどうかといった条件をすべてifの条件に書いているんですが

あまりに条件が長く多くなってしまっており。それをシンプルにする方法があれば教えてほしいのです。こういった条件でもいけるや、もっと単純な方法で判断できるなど教えてください

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

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

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

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

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

can110

2018/07/11 06:35

現状のソースコードを提示ください。
guest

回答3

0

ベストアンサー

まず「同程度」と「相対的に高い」を明確にする必要があります。
ご自身でもよく分からない、うまく説明できない場合は、シンプルな具体例をとっかかりにして考えてみましょう。
たとえばACE=[1,3,5]は「同程度」か?また、それは何故か?を考えます。
この「何故か?」が分からない、説明できないとコードに落とすことはできません。

これらが明確になれば、次に処理を分割して箇条書きにしてみます。
具体的には

  • BDとACEについて、各「同程度」度を算出する。
  • 各「同程度」度が範囲外ならダメ。
  • BDとACEについて、各「高い」度を算出する。
  • BDとACEの「高い」度を比較する。

といった感じでしょうか。
これらを踏まえ、ややエスパーして組んでみました。
判定処理を別関数にし、合致しない場合は早めにreturnするとコードの見通しが良くなります。

Python

1def isM( para): 2 3 bd = [para[1],para[3]] 4 ace= [para[0],para[2],para[4]] 5 6 # 「同程度」か 7 if max(bd)-min(bd) > 3: 8 return False 9 if max(ace)-min(ace) > 3: # 差分値で判断(1,4,7を同程度とする)なら 3 * 2(ギャップ数) 10 return False 11 12 # BDがACEに対して「相対的に高い」か 13 # とりあえず平均値で判定する 14 if (sum(bd)/len(bd)) - (sum(ace)/len(ace)) < 6: 15 return False 16 17 return True 18 19print(isM([1,4,2,5,3])) 20print(isM([1,8,2,9,3]))

投稿2018/07/11 09:46

can110

総合スコア38266

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

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

12tenten31

2018/07/12 01:37

なるほど、言葉足らずなものにお答えしていただき感謝します。回答を見ながらもう一度じっくり考えます
guest

0

修正依頼ですが、コメント欄に収まりきらないので回答に書きます。

配列para[5]にキーボード入力で0から30までの好きな整数を入力し、その数字の組み合わせによって結果を表示したいのです

こう書かれると、**配列para[5]**がまず何を意味する表現なのか悩みます。要素数5のリストですか?

そこでpara[1]とpara[3]が同程度(差が3で考えています)でかつpara[0] para[2] para[4]が同程度(差が3)でBDペアがACEに対して相対的に高い(差が6程度)組み合わせの時に「M型」という結果を表示したいとします

BDペアACEについて説明をしてください(推測はできるけど)。
相対的に高いとは、どうやって測るのですか? 平均とか?

投稿2018/07/11 03:43

hayataka2049

総合スコア30933

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

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

0

例えば、こんな感じですかね?

python

1abs(para[1]-para[3])<=3 and max(para[0],para[2],para[4])-min(para[0],para[2],para[4])<=3 and min(para[1],para[3])>=max(para[0],para[2],para[4])+6

投稿2018/07/11 03:17

hiro-k

総合スコア902

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問