好的,所以我发现了一切。但是现在我正在尝试使用if语句来告诉循环从低于22 mpg的车辆中获取平均mpg(来自.txt文件),然后将其平均上升并输出IDLE。我觉得我应该在循环之前运行if语句。我只是不确定我真正需要改变什么。我想我应该能够切换保存文本文件数据的变量。反正这里是我的代码。有人能帮我理解我做得不对吗?
def cityGasGuzzler():
# Input:that assigns a text file to a value and provides other definition
values
cityGuzz = open("carModelData_city.","r")
# Process: For loop to get average of gas guzzling city street driving
vehicles
for line in cityGuzz:
# Process: Uses if statement to get the average of lower mpg or gas guzzlers
if cityGuzz[0:-1] < 22:
sum = sum + eval(line)
count = count + 1
avrg = sum / count
# Output: using the round function to get average to the 2nd decimal place
# and prints string and rounded variable to IDLE.
print("The average city MPG is,", round(avrg, 2))
cityGasGuzzler()
为了澄清,我的主要目标如下,从文本文件中取小于22的数值,将其平均值并将平均值输出到IDLE。
答案 0 :(得分:1)
你的问题是你试图在循环的每次迭代中划分数量。你的代码中也有几个错误。试试吧。
sum = 0.0
quantity = 0
with open('file.txt', 'r') as f:
for line in f.readline():
if line.isdigit():
sum += float(line)
quantity += 1
average = sum/quantity
print average
答案 1 :(得分:0)
如果我正确理解了这个问题,那么您的问题就出在这一行:
if cityGuzz[0:-1] < 22:
由于多种原因,这不起作用,尤其是因为cityGuzz
是文件对象,而不是当前行。在将当前行与22
之类的数字进行比较之前,您需要将当前行转换为数字。
尝试这样的事情:
total = 0 # renamed to avoid masking the builtin sum function
count = 0
for line in cityGuzz:
mpg = float(line)
if mpg < 22:
total += mpg
count += 1
average = total / count
我将sum
重命名为total
,因为sum
是内置函数的名称。实际上,替换显式循环以从文件中添加值可能是有用的。以下是平均计算的替代实现:
guzzlers = [mpg for mpg in map(float, cityGuzz) if mpg < 22]
average = sum(guzzlers) / len(guzzlers)