0

次の2つのコードを書きました

FCTRL2.py

import sys;
def fact(x):
    res = 1
    for i in range (1,x+1):
        res=res*i
    return res;

t = int(raw_input());
for i in range (0,t):
    print fact(int(raw_input()));

AP2.py

import sys;

t = int(raw_input());
for i in range (0,t):
    x,y,z = map(int,sys.stdin.readline().split())
    n = (2*z)/(x+y)
    d = (y-x)/(n-5)
    a = x-(2*d)
    print n
    for j in range(0,n):
        sys.stdout.write(a+j*d)
        sys.stdout.write(' ')
    print' '

FCTRL2.pyはspojで受け入れられますが、AP2.pyはNZECエラーを出します。どちらも私のマシンでは正常に動作し、両方からの戻り値に関してはあまり違いはありません。両方の違いと、AP2.pyのNZECエラーを回避する方法を説明してください

4

2 に答える 2

4

入力に余分な空白がある場合があります。優れた問題セッターは、入力が指定された形式を満たしていることを確認します。しかし、spojではほとんどの人が問題を追加できるため、このような問題が発生することがあります。空白の問題を軽減する1つの方法は、入力を一度に読み取り、トークン化することです。

import sys;   # Why use ';'? It's so non-pythonic.

inp = sys.stdin.read().split()    # Take whitespaces as delimiter
t = int(inp[0])
readAt = 1
for i in range (0,t):
    x,y,z = map(int,inp[readAt:readAt+3])    # Read the next three elements
    n = (2*z)/(x+y)
    d = (y-x)/(n-5)
    a = x-(2*d)
    print n
    #for j in range(0,n):
    #    sys.stdout.write(a+j*d)
    #    sys.stdout.write(' ')
    #print ' '
    print ' '.join([str(a+ti*d) for ti in xrange(n)]) # More compact and faster
    readAt += 3   # Increment the index from which to start the next read
于 2013-01-06T17:09:02.727 に答える
0

10行目のnはfloatにすることができ、範囲関数は整数を期待します。したがって、プログラムは例外を除いて終了します。

私はこれをWindowsで次の値でテストしました。

>ap2.py
23
4 7 9
1.6363636363636365
Traceback (most recent call last):
  File "C:\martin\ap2.py", line 10, in <module>
    for j in range(0,n):
TypeError: 'float' object cannot be interpreted as an integer
于 2012-12-21T09:55:48.717 に答える