-1
def main():
    NUMBER_OF_DAYS = 10
    NUMBER_OF_HOURS = 24
    data = []
    for i in range(NUMBER_OF_DAYS):
        data.append([])
        for j in range(NUMBER_OF_HOURS):
            data[i].append([])
            data[i][j].append(0)
            data[i][j].append(0)
    for k in range(NUMBER_OF_DAYS * NUMBER_OF_HOURS):
        line = input().strip().split()
        day = eval(line[0])
        hour = eval(line[1])
        temperature = eval(line[2])
        humidity = eval(line[3])
        data[day - 1][hour - 1][0] = temperature
        data[day - 1][hour - 1][1] = humidity
    for i in range(NUMBER_OF_DAYS):
        dailyTemperatureTotal = 0
        dailyHumidityTotal = 0
        for j in range(NUMBER_OF_DAYS):
            dailyTemperatureTotal += data[i][j][0]
            dailyHumidityTotal += data[i][j][1]
        print("Day " + str(i) + "'s average temperature is" + str(dailyTemperatureTotal / NUMBER_OF_HOURS))
        print("Day " + str(i) + "'s average humidity is" + str(dailyHumidityTotal / NUMBER_OF_HOURS))

main()

好吧,这让我很紧张。由于我面临的另一个错误,我似乎无法运行此代码。解析时这个 EOF 是什么。由于某种原因,它似乎突出显示day = eval (line[0]),我不知道为什么

4

2 回答 2

2

这意味着line[0]由不完整的 Python 语句组成。一个空字符串可以做到这一点,例如:

>>> eval('')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 0

    ^
SyntaxError: unexpected EOF while parsing

如果您的输入由整数组成,请int()改为使用更清晰的错误消息,并检查空行。

有更好的方法来构建你的数据结构;例如列表理解:

totals = [[0, 0] for _ in range(NUMBER_OF_DAYS)]

这个结构足以容纳所有总数;当您可以每天总结整个事情时,保持每小时值是没有意义的。

我会阅读stdin而不是使用input(),直接总结每天的温度和湿度:

from itertools import islice
import sys

for line in islice(sys.stdin, NUMBER_OF_DAYS * NUMBER_OF_HOURS):
    day, hour, temperature, humidity = map(int, line.split())
    data[day - 1][0] += temperature
    data[day - 1][1] += humidity

并计算平均值变为:

for i, (temp, humidity) in enumerate(data):
    print("Day {}'s average temperature is {}".format(i,  temp / NUMBER_OF_HOURS))
    print("Day {}'s average humidity is {}".format(i,  humidity / NUMBER_OF_HOURS))
于 2013-07-24T18:51:36.767 回答
0

看起来问题出在这个部分

for k in range(NUMBER_OF_DAYS * NUMBER_OF_HOURS):
        line = input().strip().split()
        day = eval(line[0])

我假设您希望用户每次都输入一个值,然后通过 eval 处理输入?

我不确定 eval 在做什么,但根据错误消息,line变量为空,或者具有len(line) == 0: True属性,因此line[0]不起作用。

如果你input()在 python3 中使用,与 python2 相比input(),它总是将用户输入读取为string. 所以它类似于python2的raw_input()功能。也许您的eval()函数缺少从strto的转换int?但同样,我不确定eval()在做什么。

也许只是插入一个

print("\n\nline: {}\n\n".format(line))

for k in range(NUMBER_OF_DAYS * NUMBER_OF_HOURS):
        line = input().strip().split()

我们会知道更多

于 2013-07-24T19:51:47.663 回答