我正在研究一项计划,该计划将在1950年至1990年期间为美国拉动年中人口。第一行为50,下一行的人口为51,依此类推。该计划提取信息,然后显示人口增长最快,人口增长最小的年份,以及日期范围内人口的年均变化。
我可以做前两个,但平均年度变化没有正确显示。我得到了一个暗示,显然我在30处错过了一条线。年平均变化只是显示为零? :(
def main():
#setup variables
yearly_change = []
change=0.0
total_change=0
average_change=0
greatest_increase=0
smallest_increase=0
greatest_year=0
smallest_year=0
BASE_YEAR=1950
try:
#open the file for reading
input_file = open("USPopulation.txt", "r")
#read all the lines in the in file into a list
yearly_population= input_file.readlines()
#turn all read lines into a number
for i in range(len(yearly_population)):
yearly_population[i] = float(yearly_population[i])
#calculate the change in population size for each two years
for i in range(1,len(yearly_population)):
change = yearly_population[i] - yearly_population[i-1]
#MISSING SINGLE LINE HERE?
#if this is the first year, set trackers to its value
if i==1:
greatest_increase = change
smallest_increase = change
greatest_year = 1
smallest_year = 1
#this is not the first change in population size
#update the trackers if relevent
else:
if change>greatest_increase:
greatest_increase = change
greatest_year = i
elif change<smallest_increase:
smallest_increase = change
smallest_year = i
total_change = float(sum(yearly_change))
average_change = total_change/40
print("The average annual change in population during the time period is",\
format(average_change, '.2f'))
print("The year with the greatest increase in population was",
BASE_YEAR+greatest_year)
print("The year with the smallest increase in population was",
BASE_YEAR+smallest_year)
input_file.close()
except IOError:
print("The file could not be found")
except IndexError:
print("There was an indexing error")
except:
print("An error occurred")
main()
根据要求,以下是输入文件的几行:
151868
153982
156393
158956
161884
165069
168088
171187
174149
177135
179979
这只是一个基本的.txt文件,第一行是1950年的国家人口,第二行是1951年的人口,依此类推。
答案 0 :(得分:1)
你这样做:
total_change = float(sum(yearly_change))
average_change = total_change/40
但您将yearly_change
设置为空列表,此处为:
yearly_change = []
然后永远不会改变它。所以你试图计算一个空列表的总和,然后尝试计算它的平均值,所以它显然会为零。您的程序应该以某种方式更新yearly_change
,或者您应该计算其他列表的总和。
答案 1 :(得分:0)
您需要在代码中添加此行以更新yearly_change
字段:
for i in range(1,len(yearly_population)):
change = yearly_population[i] - yearly_population[i-1]
yearly_change.append(change) #new line
这应该存储字段中的每个更改,因此当您尝试计算该列表不再为空时的平均值。
答案 2 :(得分:0)
如果它是一个大文件,你可以使用
for i in xrange(1, len(yearly_population)):
change = yearly_population[i] - yearly_population[i-1]
yearly_change.append(change)