-2

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

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()

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

4

3 回答 3

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 文档可以找到错误的描述。搜索建议的一种简单方法是查看该语言的文档,并可能搜索整个错误消息。您可能不是第一个遇到此问题的人,并且可能有讨论和解决方案建议可用于找出您的具体错误。

于 2013-11-06T00:07:14.763 回答
0

像这样的行:

if element.strip() > (lowest):

可能应该明确转换为数字。目前,您正在比较 astrint。转换 usingint将考虑空格,其中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)))
于 2013-11-06T00:10:01.243 回答
-2

当您调用 open(filename) 时,您正在构建一个文件对象。您不能在 for 循环中遍历它。

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

lines = file.readlines()

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

for line in lines: 
  value = int(line)
于 2013-11-06T00:11:17.757 回答