首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >需要从列表中的列表中添加多个值(IndexError:列表索引超出范围)

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

Stack Overflow用户
提问于 2019-04-25 03:33:27
回答 1查看 18关注 0票数 0

我正在尝试将来自多个‘患者’的数据加在一起,我需要能够为这组患者输出平均所需的蛋白质、碳水化合物、脂肪和千焦耳

我还在学习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相加时,它似乎是在我需要的时候将患者的蛋白质、碳水化合物、脂肪和千焦耳相加,这样我就可以除以患者的数量来得到平均值

EN

回答 1

Stack Overflow用户

发布于 2019-04-25 03:40:47

我敢肯定你把这里的索引顺序搞错了:

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55837312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档