 1 # ケース４修正版
 2 from datetime import datetime, date
 3 
 4 def case4_mod():
 5     print('=== Start case4 MOD ===')
 6 
 7     df = True # デバッグログ出力制御フラグ
 8     #df = False
 9 
10     total = 0
11     diff_total = 0
12     quo_total = 0
13     prev_d = 0
14     
15     #ファイルを開く
16     with open('input.data', 'r') as f:
17         # １行読む
18         for line in f:
19             if df: print('line = ', line)
20             w = line.split()
21             if df: print('w = ', w)
22             for v in w:               
23                 if df:
24                     print('v = ', v)
25                     d_print(total, diff_total, quo_total, prev_d)
26 
27                 # 値、差分、商を求める
28                 r1, r2, r3, r4 = calc_func(prev_d, v)    ←計算処理部分を関数化
29                 # 合計
30                 total += r1
31                 # 差分の合計
32                 diff_total += r2
33                 # 商の合計
34                 quo_total += r3
35                 if r4 >= 0:
36                     prev_d = r4
37                 
38                 if df:
39                     d_print(total, diff_total, quo_total, prev_d)    ←デバッグログの出力処理を関数化
40 
41     # 全行読んだら、結果出力
42     print('合計：' + str(total))
43     print('差の合計：' + str(diff_total))
44     print('商の合計：' + str(quo_total))
45     print('=== Finish case4 MOD ===')
46 
47    
48 def calc_func(prev_d, v):    ←計算処理部分を関数化
49     
50     #数値でない場合はエラー
51     if v.isdecimal() == False:
52         print('数値以外が指定されました：' + v)
53         return 0,0,0,-1
54     else:
55         #数値化
56         d = int(v)
57         # 0 から 99 ではない場合はエラー
58         if 0 <= d <= 99:
59             # 前の値との差分の絶対値を計算
60             diff = abs(d - prev_d)
61             # 前の値との商を計算
62             if prev_d == 0:
63                 quo = d
64             else:
65                 quo = d / prev_d
66         else:
67             print('範囲外の数値が指定されました：' + v)
68             return 0,0,0,-1
69 
70     return d, diff, quo, d
71 
72 
73 def d_print(total, diff_total, quo_total, prev_d):   ←←デバッグログの出力処理を関数化
74     print('total = ', total)
75     print('diff_total = ', diff_total)
76     print('quo_total = ', quo_total)
77     print('prev_d = ', prev_d)
78 
79 
80 # メイン
81 if __name__ == "__main__":
82     case4_mod()
