paiza 問題「五目並べ Python3編」

for str in line:
の書き方すっかり忘れてたわ。実行時間0.02 sだったしいいか。

縦横斜めでOとXの数をカウントしていき、5個あればflagを立てて勝者確定。その後のカウントはスキップする。もし、OとXが両方出てきたら、すぐにカウント終了する。

1ループごとにOfとXfの数を判定しているのがすごく無駄な気がしているのだが...。for ループが終わってからOfとXfの判定をするようにしたい....。

問題はこちら。
五目並べ | レベルアップ問題集 | プログラミング学習サービス【paizaラーニング】

s=[]
for i in range(5):
    temp = [s for s in input()]
    s.append(temp)
    
#print(s)
flag=0 #勝者決まったら1に
res = 'D' #result。勝者なければそのままDで
#横の判定
for i in range(5):
    Of = 0
    Xf = 0
    for j in range(5):
        if s[i][j] == 'O':
            Of += 1
        elif s[i][j] == 'X':
            Xf += 1
        elif Xf>0 and Of>0:
            break
    
    if Of == 5:
        res = 'O'
        flag = 1
        break
    
    elif Xf == 5:
        res = 'X'
        flag = 1
        break

if flag == 0:
    #縦の判定
    for i in range(5):
        Of = 0
        Xf = 0
        for j in range(5):
            if s[j][i] == 'O':
                Of += 1
            elif s[j][i] == 'X':
                Xf += 1
            elif Xf>0 and Of>0:
                break
        
        if Of == 5:
            res = 'O'
            flag = 1
            break
        elif Xf == 5:
            res = 'X'
            flag = 1
            break

if flag == 0:
    #斜めの判定(右下がり)
    Of = 0
    Xf = 0
    for i in range(5):
        if s[i][i] == 'O':
            Of += 1
        elif s[i][i] == 'X':
            Xf += 1
        elif Xf>0 and Of>0:
            break
    if Of == 5:
        res = 'O'
    elif Xf == 5:
        res = 'X'

if flag == 0:
    #斜めの判定(左上がり)
    Of = 0
    Xf = 0
    for i in range(5):
        if s[i][4-i] == 'O':
            Of += 1
        elif s[i][i] == 'X':
            Xf += 1
        elif Xf>0 and Of>0:
            break
    if Of == 5:
        res = 'O'
    elif Xf == 5:
        res = 'X'

print(res)