Необходимо добавить множественные значения из списка в списке (IndexError: индекс списка вне диапазона) - PullRequest
0 голосов
/ 24 апреля 2019

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

Я все еще изучаю 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))

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

1 Ответ

0 голосов
/ 24 апреля 2019

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

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] выйдет за пределы всех измерений для текущего пациента и дастОшибка индекса вне диапазона.

...