Python中的UVa运行时错误

时间:2016-02-12 03:53:01

标签: python runtime-error

所以我试图从UVa在线评判中解决以下问题:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2864

我在Python中编写了以下代码:

t = int(input())
for i in range(t):
    highs = 0
    lows = 0
    walls = int(input())
    heights = [0]*50
    for h in range(walls):
        heights[h] = (int(input()))
    for j in range(1, walls):
        if (heights[j] < heights[j - 1]):
            highs += 1
        elif (heights[j] > heights[j - 1]):
            lows += 1
    print("Case %d: %d %d" % (i + 1, highs, lows))

exit(0)

每次我尝试不同测试用例的代码时,都会得到预期的输出;它在我的身边工作得非常好,但是当我提交它时,我继续遇到运行时错误。我现在很绝望,因为我已经尝试了一百万件事而且没有任何作用。请帮忙。

2 个答案:

答案 0 :(得分:1)

我认为错误就在这里:

for h in range(walls):
    heights[h] = (int(input()))

input()读取一行,然后int()尝试将该行转换为整数。但是"1 4 2 2 3 5 3 4"不能转换为整数,如果你读了8行,你可能会用尽输入。

相反,请尝试

heights = [int(i) for i in input().split()]

应返回[1, 4, 2, 2, 3, 5, 3, 4]

答案 1 :(得分:0)

正如所建议的那样,运行时错误出现在代码的这一部分中:

for h in range(walls):
    heights[h] = (int(input()))

您可以更改

heights = [int(i) for i in input().split()]

并省略该行

heights = [0]*50

我发现的另一件事是你以相反的方式计算低点和高点。你应该这样做:

    if (heights[j] < heights[j - 1]):
        lows += 1
    elif (heights[j] > heights[j - 1]):
        highs += 1

那应该有用。希望你得到解决方案接受;)