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

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

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

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

Q&A

解決済

2回答

1152閲覧

python 関数を短くしたいです。

hogeee

総合スコア27

Python 3.x

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

0グッド

0クリップ

投稿2020/11/08 08:18

python

1# b = 棟, f = 階, r = 部屋番号, v = 追加人数 2def add(b, f, r, v): 3 if b == 1: 4 if ((A[f - 1][r - 1] + v) >= 0) and ((A[f - 1][r - 1] + v) <= 9): #人数を追加して0以下にならない、かつ、10人以上にならない 5 A[f - 1][r - 1] += v #マイナスにならないなら追加 6 elif ((A[f - 1][r - 1] + v)) < 0 #人数を追加して0以下になる場合。 7 A[f - 1][r - 1] = 0 8 elif ((A[f - 1][r - 1] + v) > 9): #人数を追加して10人以上になる場合。 9 A[f - 1][r - 1] = 9 10 if b == 2: 11 if ((B[f - 1][r - 1] + v) >= 0) and ((B[f - 1][r - 1] + v) <= 9): 12 B[f - 1][r - 1] += v 13 elif ((B[f - 1][r - 1] + v)) < 0: 14 B[f - 1][r - 1] = 0 15 elif ((B[f - 1][r - 1] + v) > 9): 16 B[f - 1][r - 1] = 9 17 if b == 3: 18 if ((C[f - 1][r - 1] + v) >= 0) and ((C[f - 1][r - 1] + v) <= 9): 19 C[f - 1][r - 1] += v 20 elif ((C[f - 1][r - 1] + v)) < 0: 21 C[f - 1][r - 1] = 0 22 elif ((C[f - 1][r - 1] + v) > 9): 23 C[f - 1][r - 1] = 9 24 if b == 4: 25 if ((D[f - 1][r - 1] + v) >= 0) and ((D[f - 1][r - 1] + v) <= 9): 26 D[f - 1][r - 1] += v 27 elif ((D[f - 1][r - 1] + v)) < 0: 28 D[f - 1][r - 1] = 0 29 elif ((D[f - 1][r - 1] + v) > 9): 30 D[f - 1][r - 1] = 9 31 32A = [[0,0,0,0,0,0,0,0,0,0], 33 [0,0,0,0,0,0,0,0,0,0], 34 [0,0,0,0,0,0,0,0,0,0]] 35B = [[0,0,0,0,0,0,0,0,0,0], 36 [0,0,0,0,0,0,0,0,0,0], 37 [0,0,0,0,0,0,0,0,0,0]] 38C = [[0,0,0,0,0,0,0,0,0,0], 39 [0,0,0,0,0,0,0,0,0,0], 40 [0,0,0,0,0,0,0,0,0,0]] 41D = [[0,0,0,0,0,0,0,0,0,0], 42 [0,0,0,0,0,0,0,0,0,0], 43 [0,0,0,0,0,0,0,0,0,0]] 44 45 46x = int(input()) 47count = 0 48 49while count != x: 50 count += 1 51 b, f, r, v = map(int, input().split()) 52 add(b, f, r, v) 53 54#表示 55for i in range(len(A)): 56 print(' ', end = '') 57 for j in A[i]: 58 print('{} '.format(j), end='') 59 print('') 60print('####################') 61for i in range(len(B)): 62 print(' ', end = '') 63 for j in B[i]: 64 print('{} '.format(j), end='') 65 print('') 66print('####################') 67for i in range(len(C)): 68 print(' ', end = '') 69 for j in C[i]: 70 print('{} '.format(j), end='') 71 print('') 72print('####################') 73for i in range(len(D)): 74 print(' ', end = '') 75 for j in D[i]: 76 print('{} '.format(j), end='') 77 print('')

上のコードはAIZU ONLINE JUDGEというサイトの問題に挑戦した時のコードです。
https://onlinejudge.u-aizu.ac.jp/courses/lesson/2/ITP1/6/ITP1_6_C

下の関数部分がかなり膨らんでいるので、すっきりさせたいです。
A,B,C,Dと4パターンを愚直に書いてしまっているので膨らんでいるのですが、1パターンだけ書いてA,B,C,Dの4パターンに対応できるようにしたいのですが、何か方法はないでしょうか?
よろしくお願いいたします。

python

1def add(b, f, r, v): 2 if b == 1: 3 if ((A[f - 1][r - 1] + v) >= 0) and ((A[f - 1][r - 1] + v) <= 9): #人数を追加して0以下にならない、かつ、10人以上にならない 4 A[f - 1][r - 1] += v #マイナスにならないなら追加 5 elif ((A[f - 1][r - 1] + v)) < 0 #人数を追加して0以下になる場合。 6 A[f - 1][r - 1] = 0 7 elif ((A[f - 1][r - 1] + v) > 9): #人数を追加して10人以上になる場合。 8 A[f - 1][r - 1] = 9 9 if b == 2: 10 if ((B[f - 1][r - 1] + v) >= 0) and ((B[f - 1][r - 1] + v) <= 9): 11 B[f - 1][r - 1] += v 12 elif ((B[f - 1][r - 1] + v)) < 0: 13 B[f - 1][r - 1] = 0 14 elif ((B[f - 1][r - 1] + v) > 9): 15 B[f - 1][r - 1] = 9 16 if b == 3: 17 if ((C[f - 1][r - 1] + v) >= 0) and ((C[f - 1][r - 1] + v) <= 9): 18 C[f - 1][r - 1] += v 19 elif ((C[f - 1][r - 1] + v)) < 0: 20 C[f - 1][r - 1] = 0 21 elif ((C[f - 1][r - 1] + v) > 9): 22 C[f - 1][r - 1] = 9 23 if b == 4: 24 if ((D[f - 1][r - 1] + v) >= 0) and ((D[f - 1][r - 1] + v) <= 9): 25 D[f - 1][r - 1] += v 26 elif ((D[f - 1][r - 1] + v)) < 0: 27 D[f - 1][r - 1] = 0 28 elif ((D[f - 1][r - 1] + v) > 9): 29 D[f - 1][r - 1] = 9

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

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

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

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

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

guest

回答2

0

これでいかがでしょうか?

Python

1def add(b, f, r, v): 2 a = [A, B, C, D] 3 x = a[b - 1][f - 1][r - 1] + v 4 if x < 0: x = 0 5 elif x > 9: x = 9 6 a[b - 1][f - 1][r - 1] = x

追記
if x >= 9:elif x > 9: に修正しました。

投稿2020/11/09 07:12

編集2020/11/09 17:00
kazuma-s

総合スコア8224

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

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

hogeee

2020/11/09 08:52

あ、あなたは神ですか!!! 凄すぎる!!!!! 目からうろこです…
guest

0

ベストアンサー

   def addsub(A, f, r, v): if ((A[f - 1][r - 1] + v) >= 0) and ((A[f - 1][r - 1] + v) <= 9): A[f - 1][r - 1] += v ....... def add(b, f, r, v): if b==1: addsub(A,f,r,v) if b==2: addsub(B,f,r,v) .....

共通部分は共通に

投稿2020/11/08 08:37

y_waiwai

総合スコア88042

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

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

hogeee

2020/11/08 08:53

ありがとうございます。 なんでこんな簡単なことに気づかなかったのか、とても恥ずかしいです。 助かりました!
y_waiwai

2020/11/08 09:02

もっと短くするなら、 ninzu=A[f - 1][r - 1] + v if (ninzu) >= 0) and (ninzu <= 9): A[f - 1][r - 1] = ninzu ってふうにできますね
hogeee

2020/11/08 09:33

なるほど! 一度変数に入れておいて、その変数をboolしたほうが短いし、見やすいですね!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問