我写了以下两个代码
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()));
和
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' '
在spoj上接受FCTRL2.py,而AP2.py则给出NZEC错误。两者都可以在我的机器上正常工作,并且我没有发现从两者返回值的差异。请解释两者之间的区别是什么以及如何避免AP2.py
的NZEC错误答案 0 :(得分:4)
输入中可能有额外的空格。一个好的问题设定器将确保输入满足指定的格式。但是,由于spoj几乎可以让任何人添加问题,因此有时会出现这样的问题。缓解空白问题的一种方法是立即读取输入,然后对其进行标记。
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
答案 1 :(得分:0)
第10行中的n可以是float,range函数需要一个整数。因此程序退出时有例外。
我在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