 1 # ケース５修正版
 2 
 3 from datetime import datetime, date
 4 import unicodedata
 5 
 6 def case5_mod():
 7     print('=== Start case5 mod ===')
 8 
 9     line_num = 0
10     
11     #ファイルを開く
12     f1 = open('input_case5_1.data', 'r')
13     f2 = open('input_case5_2.data', 'r')
14     f3 = open('input_case5_3.data', 'r')
15 
16     while True:
17         # 各ファイルを１行読む
18         line_1 = f1.readline()
19         line_2 = f2.readline()
20         line_3 = f3.readline()
21 
22         # ファイルの終了確認
23         if line_1 == '' and line_2 == '' and line_3 == '':
24             print('比較終了')
25             break
26         if line_1 == '' or line_2 == '' or line_3 == '':
27             if line_1 == '':
28                 print('ファイル1は行数が少ないです')
29             if line_2 == '':
30                 print('ファイル2は行数が少ないです')
31             if line_3 == '':
32                 print('ファイル3は行数が少ないです')
33             break
34 
35         # 行数カウント
36         line_num += 1
37 
38         # 単語分割および正規化
39         w1, w1_num = normalize(line_1)
40         w2, w2_num = normalize(line_2)   ←重複部分を関数化
41         w3, w3_num = normalize(line_3)
42 
43         # 要素数比較
44         if w1_num != w2_num != w3_num:
45             print('要素数が異なります：', w1_num, w2_num, w3_num)
46             continue
47 
48         for i in range(w1_num):
49             e1 = w1[i]
50             e2 = w2[i]
51             e3 = w3[i]
52 
53             if e1 != e2 or e2 != e3:
54                 print(line_num, '行目：', i+1, '番目の単語が一致しません：', e1, e2, e3)
55                 break
56 
57 
58     print('=== Finish case5 mod ===')
59 
60 def normalize(line):   ←重複部分を関数化した
61     l = unicodedata.normalize('NFKC', line)
62     l_u = l.upper()
63     w = l_u.split()
64     w_num = len(w)
65     return w,w_num
66         
67 
68 # メイン
69 if __name__ == "__main__":
70     case5_mod()
