Пожалуйста, помогите мне исправить ошибку '' list index out of range '' - PullRequest
1 голос
/ 04 ноября 2019

Я написал программу для расчета доли несовершеннолетних (в возрасте до 20 лет) в каждой префектуре Японии, и она продолжает выдавать эту ошибку: индекс списка вне диапазона, в строке 19: коэффициент = (возраст [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)

Ответы [ 2 ]

0 голосов
/ 04 ноября 2019

Вместо этого вы можете получить суммы чисел населения в нужных возрастных диапазонах и затем выполнить расчет коэффициента.

В Python вы можете использовать функцию map дляпреобразовать значения в итерируемом виде в целые и превратить их в list.

Получив список, вы можете использовать для него функцию sum или частьоб этом.

Итак, я придумал:

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()

Какие выходы (просто показывает часть здесь):

Hokkaido     0.1544532130777903  
Aomori       0.1564945226917058  
Iwate        0.16108452950558214  
Miyagi       0.16831683168316833  
Akita        0.14357429718875503  
Yamagata     0.16515426497277677  
Fukushima    0.16586921850079744

(я надеваюЯ действительно не знаю Python, так что может быть какой-то «лучший» или более традиционный способ.)

0 голосов
/ 04 ноября 2019

В строке 17 я предполагаю, что вы в следующий раз сделаете следующий код:

ratio =(agerange[0]+agerange[1]+agerange[2]+agerange[3])/population*100.0

, напишите вашу ошибку более подробно, пожалуйста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...