我正在尝试创建一个程序,要求输入文件名,打开文件,并确定文件中的最大值和最小值,还要计算文件中数字的平均值。我想打印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()
我认为我正在努力确定制作字符串的哪个部分。你们有什么感想?
答案 0 :(得分:1)
您正在比较两种不兼容的类型str
和int
。您需要确保比较相似的类型。您可能需要重写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):
应该明确转换为数字。目前,您正在比较str
和int
。使用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)