Python 2编译器在第31个输入值之后没有读取正确的值

时间:2015-06-14 08:46:14

标签: python

解决Codeabbey上的平滑天气问题。它会为前32个值打印正确的输出,之后它不会正确读取输入的值。输入的测试值远远超过150。 这是我的代码:

from __future__ import division

num=int(raw_input());

inp=((raw_input()).split(" "));
lists=[];
for i in inp:
    if inp.index(i)==0 or inp.index(i)==len(inp)-1:
        lists.append(inp[inp.index(i)])

    else:
        a,b,c=0.0,0.0,0.0;
        a=float(inp[(inp.index(i))+1])
        b=float(inp[inp.index(i)])
        c=float(inp[(inp.index(i))-1])


        x=(a+b+c)/3

        x = ("%.9f" % x).rstrip('0')

        lists.append(x)



for i in lists:
    print i,

1 个答案:

答案 0 :(得分:1)

以下代码中的 index 将始终返回inp中第一次出现的i。因此,如果inp中存在重复值,则整个逻辑失败。

if inp.index(i)==0 or inp.index(i)==len(inp)-1:
    lists.append(inp[inp.index(i)])

正确的方法是枚举和纠正指数:

from __future__ import division

num = int(raw_input())

inp = ((raw_input()).split(" "))
lists = []
for i, item in enumerate(inp):   # This will loop through inp, while filling the next item in item and keep on incrementing i each time starting with 0
    if i == 0 or i == len(inp)-1:
        lists.append(inp[i])
    else:
        a = float(inp[i+1])
        b = float(inp[i])
        c = float(inp[i-1])

        x = (a+b+c) / 3.0
        x = ("%.9f" % x).rstrip('0')
        lists.append(x)

for i in lists:
    print i,

希望有所帮助。