需要从列表中的列表中添加多个值(IndexError:列表索引超出范围)

时间:2019-04-24 19:33:27

标签: python-3.x pc

我正在尝试将多个“患者”的数据相加,我需要能够输出一组患者的平均所需蛋白质,碳水化合物,脂肪和千焦耳

我仍在学习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加起来时,似乎需要增加患者的蛋白质,碳水化合物,脂肪和千卡的蛋白质时,就将患者的蛋白质加在一起,这样我就可以除以患者数以获得平均值。

1 个答案:

答案 0 :(得分:0)

我很确定您在这里将索引排序错误:

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]将超出当前病人的所有测量值,并给出索引超出范围的误差。