从if语句Python 3中获取平均值

时间:2017-12-08 23:36:25

标签: python python-3.x

好的,所以我发现了一切。但是现在我正在尝试使用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。

2 个答案:

答案 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)