Необходимо добавить несколько значений из списка в список (IndexError: индекс списка вне допустимого диапазона)

Я пытаюсь сложить данные от нескольких «пациентов», мне нужно иметь возможность вывести средний необходимый белок, углеводы, жиры и килоджоули для группы пациентов.

Я все еще изучаю python, и я прочитал множество других вопросов, но, похоже, ничего не работает

я получаю сообщение об ошибке в строке 29 с помощью sum_f, однако я думаю, что, вероятно, есть проблемы с sum_p и sum_f

Раньше я получал, что объект int не подлежит подписке, но я думаю, что исправил это

patient_input = int(input("Enter number of patients:"))
a = 1
patient_data=[]
if patient_input > 0:
    while a <= patient_input :
        a_str = str(a)
        print ("Patient " + (a_str))
        protein = int(input("Amount of protein (g) required:"))
        while protein <= 0:
            print ("Please enter a nonnegative number" )
        carbohydrates = int(input("Amount of carbohydrates (g) required:"))
        while carbohydrates <= 0:
            print ("Please enter a nonnegative number" )
        fat= int(input("Amount of fat (g) required:"))
        while fat <= 0:
            print ("Please enter a nonnegative number" )
        kilojules = 4.18 * (4*protein + 4*carbohydrates + 9.30*fat)
        a_str = [protein, carbohydrates, fat, kilojules]
        patient_data.append(a_str)
        a = a + 1
    print(patient_data)

^ Кажется, все в порядке, я исправлял в нем ошибки за последние пару часов

    b = int((patient_input) + 1)
    sum_p = sum(int(i)for i in patient_data [0][0:b])
    average_p =(int(b))*(sum_p)
    sum_c = sum(int(i)for i in patient_data [1][0:b]) 
    average_c = str((b)*(sum_c))
    sum_f = sum(int(i)for i in patient_data [2][0:b]) 
    average_f = str((b)*(sum_f))
    sum_k = sum(int(i)for i in patient_data [3][0:b]) 
    average_k = str((b)*(sum_k))
    print ("Averages:")
    print ("Protein (g):" (average_p))
    print ("Carbohydrates (g):" (average_c))
    print ("Fats (g):" (average_f))
    print ("Kilojules (kJ):" (average_k))

когда sum_p складывается, кажется, что добавляется белок, углеводы, жиры и килоджули пациента, когда мне нужно добавить белок пациентов вместе, чтобы я мог разделить на количество пациентов, чтобы получить среднее


person Louise Barrett    schedule 24.04.2019    source источник


Ответы (1)


Я почти уверен, что у вас здесь неправильно упорядочены индексы:

sum_p = sum(int(i)for i in patient_data [0][0:b])

Первый [0] говорит вам использовать первого пациента, затем [0:b] выполняет различные измерения для этого пациента. Попробуйте переключить их:

sum_p = sum(int(i)for i in patient_data[0:b][0])

Примечание: поскольку у вас было больше пациентов, чем вы выполняете измерений для каждого пациента, [0:b] выйдет за пределы всех измерений для текущего пациента и выдаст ошибку индекса вне допустимого диапазона.

person Hoog    schedule 24.04.2019