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
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/09 08:52