 1 # ケース３
 2 
 3 from datetime import datetime, date
 4 
 5 def case3():
 6     print('=== Start case3 ===')
 7 
 8     # チェック・モードの定義
 9     CHECK_MODE_NONE = 0
10     CHECK_MODE_WARN = 1
11     CHECK_MODE_FATAL = 2
12 
13     # 動作設定
14     check = CHECK_MODE_FATAL
15     line_limit = 10
16     word_limit = 0
17 
18     line_num = 0
19     word_total = 0
20     err = 0
21 
22     #ファイルを開く
23     with open('input_case3.data', 'r') as f:
24         # １行読み、行処理のループ
25         for line in f:
26             if line_limit > 0 and line_num == line_limit:   ←処理を抜ける条件
27                 if check == CHECK_MODE_WARN:
28                     print('読み込み行数が制限値を超えたので後続の行は無視します')
29                     print(line_num, ' -> ', line)
30                     break
31                 elif check == CHECK_MODE_FATAL:
32                     print('読み込み行数が制限値を超えたので プログラムを終了します')
33                     print(line_num, ' -> ', line)
34                     err = 1
35                     break
36 
37             line_num += 1
38             word_num = 0
39     
40             w = line.split()
41             line_total = 0
42             # 単語処理のループ
43             for v in w:
44                 if word_limit > 0 and word_num == word_limit:   ←処理を抜ける条件
45                     if check == CHECK_MODE_WARN:
46                         print('１行当たりの上限数を超えたので超えた部分を無視します')
47                         print(line_num, ' -> ', line)
48                         break
49                     if check == CHECK_MODE_FATAL:
50                         print('１行当たりの上限数を超えたのでプログラムを終了します')
51                         print(line_num, ' -> ', line)
52                         err = 1
53                         break
54 
55                 word_num += 1
56                 #数値でない→エラー
57                 if v.isdecimal() == False:    ←処理を抜ける条件
58                     if check == CHECK_MODE_WARN:
59                         line_num -= 1
60                         print('エラーのあった行は無視します')
61                         print(line_num, ' -> ', line)
62                         break
63                     if check == CHECK_MODE_FATAL:
64                         print('エラーがあったのでプログラムを終了します')
65                         print(line_num, ' -> ', line)
66                         err = 1
67                         break
68                     d = 0
69                 else:
70                     #数値化
71                     d = int(v)
72 
73             else:
74                 # 単語処理のforループ内でbreakしな勝った場合は、ここが実行されcontinue
75                 word_total += word_num
76                 continue
77             
78             # 単語処理のforループ内でbreakした場合は、ここが実行され行処理のループが終了
79             if err == 0:
80                 continue
81             break
82     
83 
84     if err == 0:
85         print('行数：', line_num)
86         print('単語数：', word_total)
87         print('平均単語数：', word_total / line_num)
88 
89     
90     print('=== Finish case3 ===')
91     
92 # メイン
93 if __name__ == "__main__":
94     case3()
