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])
,我不知道为什么
答案 0 :(得分: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))
答案 1 :(得分: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]
不起作用。
如果你在python3中使用input()
,与python2的input()
不同,它总是以string
的形式读取用户输入。所以它类似于python2的raw_input()
函数。也许您的eval()
函数缺少从str
到int
的转换?但同样,我不确定eval()
正在做什么。
也许只需插入
print("\n\nline: {}\n\n".format(line))
后
for k in range(NUMBER_OF_DAYS * NUMBER_OF_HOURS):
line = input().strip().split()
我们会知道更多