我写了一个程序来计算日本每个县的未成年人(年龄在20岁以下)的比率,并且不断产生此错误:第19行的列表索引超出范围:比率=(agerange [1] + agerange [2] + agerange [3] + agerange [4])/人口* 100.0
链接到csv:https://drive.google.com/open?id=1uPSMpgHw0csRx1UgAJzRLit9p6NrztFY
f=open("population.csv","r")
header=f.readline()
header=header.rstrip("\r\n")
while True:
line=f.readline()
if line=="":
break
line=line.rstrip("\r\n")
field=line.split(sep=",")
population=0
ratio=0
agerange=[ "pref" ]
for age in range(1, len(field)):
agerange.append(int(field[age]))
population+=int(field[age])
ratio =(agerange[1]+agerange[2]+agerange[3]+agerange[4])/population*100.0
print(field[0],ratio)
答案 0 :(得分:0)
在第17行,我假设您要执行以下代码:
ratio =(agerange[0]+agerange[1]+agerange[2]+agerange[3])/population*100.0
下次,请更详细地写下您的错误。
答案 1 :(得分:0)
您可以做的是获取所需年龄范围内的人口总数,然后执行比率计算。
在Python中,您可以使用map
函数将可迭代的值转换为int,然后将其转换为import matplotlib.pyplot as plt
import numpy as np
n = 100
xx = np.arange(0, n)
yy = np.random.normal(1, size=(n, 1))
fig = plt.figure()
plt.plot(xx, yy)
plt.savefig('testpngpicture.png')
plt.savefig('testrawpicture.raw', format='raw')
plt.show(fig)
。
有了列表后,就可以在其上或其中一部分使用sum
函数。
所以,我想到了:
list
哪个输出(此处仅显示一部分)
f = open("population.csv","r")
header = f.readline()
header = header.rstrip("\r\n")
while True:
line = f.readline()
if line == "":
break
line = line.rstrip("\r\n")
field = line.split(sep=",")
popData = list(map(int, field[1:]))
youngPop = sum(popData[:4])
oldPop = sum(popData[4:])
ratio = youngPop / (youngPop + oldPop)
print(field[0].ljust(12), ratio)
f.close()
(我不太了解Python,所以可能会有一些“更好”或更常规的方式。)