我试图从格式如下的txt文件中找到最小值和最大值(浮点数):
($i>=m)
当我运行我的代码时,我得到了一个
name
grade
name
grade
name
grade
这是我的代码,似乎无法弄清楚问题。
TypeError: 'float' object is not iterable
答案 0 :(得分:0)
您在阅读下一个grade
时放弃了min
,而不是将它们存储在序列中,以便与max
/ from future_builtins import map, zip # Required on Python 2 for lazy map/zip
def main ():
#open gradebook using with statement, so it's closed automatically/predictable
with open('gradebook.txt') as gradebook_file:
data = []
# Pair your lines up automatically with zip
# and convert grades to floats automatically with map
for name, grade in zip(gradebook_file, map(float, gradebook_file)):
name = name.rstrip('\n')
print('Name:', name)
print('Grade:', grade)
data.append(grade) # Store for later
#define min and max values
_min = min(data)
_max = max(data)
#print contents
print('The minimum average grade was a(n) {}.'.format(_min))
print('The maximum average grade was a(n) {}.'.format(_max))
#call main
if __name__ == '__main__':
main()
一起使用。因此,您正在尝试计算所见最后一个成绩的最小和最大值,这是无意义的(您计算一组值的最小值和最大值,而不是单个值)。您需要保留成绩,或保持最小和最大运行(使用较少的内存,但需要更多自定义代码,您可能会出错)。
如果您想存储所有成绩,请尝试以下方法:
data
使用data = []
存储所有等级只是为了获得其中两个等级的替代方法是替换:
_min, _max = float('inf'), float('-inf') # Initial values; will be replaced immediately
使用:
data.append(grade) # Store for later
然后通过替换:
保持运行最小值和最大值_min = min(_min, grade) # Or faster but more verbose: if grade < _min: _min = grade
_max = max(_max, grade) # Or faster but more verbose: if grade > _max: _max = grade
使用:
_min = min(data)
_max = max(data)
并删除:
data
因为您不再创建或填充int.MaxValue
。这种方法意味着真正庞大的输入集只需要扫描一次,而不是完全存储,而不是存储所有等级并扫描它们两次。在性能方面,它不太可能重要,除非你的输入太大,你可能会耗尽内存(不太可能是等级跟踪程序)。