年均变化?

时间:2013-10-20 21:34:34

标签: python

我正在研究一项计划,该计划将在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年的人口,依此类推。

3 个答案:

答案 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)