SPOJ中Python 2.7中的NZEC运行时错误

SPOJ中Python 2.7中的NZEC运行时错误,python,runtime-error,Python,Runtime Error,我认为我的算法是正确的(可能做得很糟糕),但我在ideone.com上得到了想要的输出。但在SPOJ中,它一直在说“运行时错误NZEC”。请提出一些修改建议,以使其正确 以下是问题的链接: 这是我的密码: import sys; inp=sys.stdin.read().split("\n"); t=int(inp[0]); i=1; g_N=dict(); g_D=dict(); t_N=dict(); t_D=dict(); while(i<t+2): a=inp[i].sp

我认为我的算法是正确的(可能做得很糟糕),但我在ideone.com上得到了想要的输出。但在SPOJ中,它一直在说“运行时错误NZEC”。请提出一些修改建议,以使其正确

以下是问题的链接:

这是我的密码:

import sys;
inp=sys.stdin.read().split("\n");
t=int(inp[0]);
i=1;
g_N=dict();
g_D=dict();
t_N=dict();
t_D=dict();
while(i<t+2):
    a=inp[i].split();
    game_N =0;
    curr_N =0;
    game_D =0;
    curr_D =0;
    tie_N=0;
    tie_D=0;
    k=0;
    n=len(a);
    while ((k<n)and((game_N<6)or(game_D<6))):
        if(a[k]=='N'):
            curr_N = curr_N +1;
            if(curr_N==4 and curr_D < 3):
                game_N=game_N +1;
                curr_N=0;
                curr_D=0;
            if(curr_N==3 and curr_D ==3) :
                while(a[k]!=a[k+1]):
                    k=k+1;
                if(a[k]=='N'):
                    game_N=game_N+1;
                    curr_N=0;
                    curr_D=0;
        if(a[k]=='D'):
            curr_D=curr_D+1;
            if(curr_D==4 and curr_N<3):
              game_D=game_D+1;
              curr_D=0;
              curr_N=0;
            if(curr_N==3 and curr_D ==3) :
               while(a[k]!=a[k+1]):
                   k=k+1;
               if(a[k]=='D'):
                   game_D=game_D+1;
                   curr_N=0;
                   curr_D=0;
        k=k+1;
        if (game_N==6 and game_D ==6):
            break;
    if((game_N==6 and game_D==5 ) or (game_N==5 and game_D==6)):
        curr_N=0
        while(game_N != 7 and game_D != 7):
            if (a[k]=='N'):
                curr_N=curr_N+1;
            if(a[k]=='D'):
                curr_D=curr_D+1;
            if(curr_N==4 and curr_D<3):
                game_N=game_N+1;
            if(curr_D==4 and curr_N<3):
                game_D=game_D+1;
    if (game_N==6 and game_D ==6):
        while (1):
            if(a[k]=='N'):
                tie_N=tie_N+1;
            if(a[k]=='D'):
                tie_D=tie_D+1;
            if(((tie_D==7 or tie_N==7) and (abs(tie_D-tie_N)>=2)) or ((tie_D>7 or tie_N>7)and(abs(tie_D-tie_N)>=2))):
                break;
            k=k+1;

    if(tie_N>tie_D):
        game_N=game_N+1;
    elif(tie_N<tie_D) :
        game_D=game_D+1;
    g_N[i]=game_N;
    g_D[i]=game_D;
    t_N[i]=tie_N;
    t_D[i]=tie_D;

    i=i+2;
i=1;
while(i<t+2):        
    if(g_N[i]>g_D[i]):
        if(t_N[i]==0 and t_D[i] ==0):
            print ("N %d" % g_N[i]);
            print ("D %d" % g_D[i]);
            print "\t";
        else :
            print ("N %d(%d-%d)"%(g_N[i],t_N[i],t_D[i]));
            print ("D %d" % g_D[i]);
    else:
        if(t_N[i]==0 and t_D[i] ==0):
            print ("D %d" % g_D[i]);
            print ("N %d" % g_N[i]);
        else :
            print ("D %d(%d-%d)"%(g_D[i],t_D[i],t_N[i]));
            print ("N %d" % g_N[i]);
    i=i+2;
导入系统;
inp=sys.stdin.read().split(“\n”);
t=int(inp[0]);
i=1;
g_N=dict();
g_D=dict();
t_N=dict();
t_D=dict();

而(i您没有考虑到输入数据结束的事实。
sys.stdin
是一个类似文件的对象,需要一个EOF字符来标记结束。由于它不存在,python尝试在不存在数据时读取更多数据,您会得到一个错误

您应该使用
input
raw\u input
而不是
sys.stdin
。例如,在上面的代码中,将第2行和第3行替换为(假设您使用Python 2.7)

同时将第一行
中的第一行替换为

a = input("")

如果程序没有出错,退出代码默认为0。
a = input("")