最大最小值和平均查找文件python

时间:2013-11-06 00:02:59

标签: python

我正在尝试创建一个程序,要求输入文件名,打开文件,并确定文件中的最大值和最小值,还要计算文件中数字的平均值。我想打印max和min值,并返回文件中的平均值。该文件每行只有一个数字,从上到下由许多不同的数字组成。到目前为止,这是我的计划:

def summaryStats():
    fileName = input("Enter the file name: ") #asking user for input of file
    file = open(fileName)
    highest = 1001
    lowest = 0
    sum = 0
    for element in file:
        if element.strip() > (lowest):
            lowest = element
        if element.strip() < (highest):
            highest = element
        sum += element
        average = sum/(len(file))
    print("the maximum number is ") + str(highest) + " ,and the minimum is " + str(lowest)
    file.close()
    return average 

当我运行我的程序时,它给了我这个错误:

summaryStats()
Enter the file name: myFile.txt
Traceback (most recent call last):
  File "/Applications/Wing101.app/Contents/MacOS/src/debug/tserver/_sandbox.py", line 1, in <module>
    # Used internally for debug sandbox under external interpreter
  File "/Applications/Wing101.app/Contents/MacOS/src/debug/tserver/_sandbox.py", line 8, in summaryStats
builtins.TypeError: unorderable types: str() > int()

我认为我正在努力确定制作字符串的哪个部分。你们有什么感想?

3 个答案:

答案 0 :(得分:1)

您正在比较两种不兼容的类型strint。您需要确保比较相似的类型。您可能需要重写for循环以包含调用,以确保您正在比较两个int值。

for element in file:
    element_value = int(element.strip())
    if element_value > (lowest):
        lowest = element
    if element_value < (highest):
        highest = element_value
    sum += element_value
    average = sum/(len(file))

当python读入文件时,它会以整个行的类型str读取它们。您拨打strip来删除周围的空格和换行符。然后,您需要将剩余的str解析为正确的类型(int)以进行比较和操作。

您应该阅读错误消息,它们可以帮助您了解代码无法运行的位置和原因。错误消息跟踪发生错误的位置。这条线

File "/Applications/Wing101.app/Contents/MacOS/src/debug/tserver/_sandbox.py", line 8, in summaryStats

告诉您检查line 8哪个地方发生错误。

下一行:

builtins.TypeError: unorderable types: str() > int()

告诉你出了什么问题。快速搜索python文档会找到description of the error。搜索建议的简单方法是查看语言的文档,并可能搜索整个错误消息。您可能不是第一个遇到此问题的人,并且可能有讨论和解决方案建议可用于找出您的具体错误。

答案 1 :(得分:0)

这样的行:

if element.strip() > (lowest):

应该明确转换为数字。目前,您正在比较strint。使用int进行转换会考虑空白,其中int(' 1 ') is 1

if int(element.string()) > lowest:

另外,你可以这样做:

# Assuming test.txt is a file with a number on each line.
with open('test.txt') as f:
    nums = [int(x) for x in f.readlines()]
    print 'Max: {0}'.format(max(nums))
    print 'Min: {0}'.format(min(nums))
    print 'Average: {0}'.format(sum(nums) / float(len(nums)))

答案 2 :(得分:-2)

当你调用open(filename)时,你正在构建一个文件对象。你不能在for循环中迭代这个。

如果每个值都在它自己的行上:在创建文件对象后,调用:

lines = file.readlines()

然后遍历这些行并转换为int:

for line in lines: 
  value = int(line)