为什么代码返回错误的乘法?

时间:2013-07-22 18:26:32

标签: python

我的学习问题是:  定义一个过程,total_enrollment,  将元素列表作为输入,  其中每个元素都是一个包含的列表  三个要素:大学名称,  报名学生总人数,  和每年的学费。

该程序应返回两个数字,  不是一个字符串,  给出学生总数  就读于所有大学  在名单中,以及总学费  (这是数字的总和  学生入学时间  每所大学的学费。)

给出的代码是:

usa_univs = [ ['California Institute of Technology',2175,37704],
          ['Harvard',19627,39849],
          ['Massachusetts Institute of Technology',10566,40732],
          ['Princeton',7802,37000],
          ['Rice',5879,35551],
          ['Stanford',19535,40569],
          ['Yale',11701,40500]  ]

我的解决方案是:

def total_enrollment(a):
    total_students = 0
    costsum = 0
    for e in a:
        total_students = total_students + e[1]
        costsum = costsum + e[2]
    all_in_all = total_students * costsum
    return total_students
    return all_in_all

我应该看到的是: 77285,3058581079

实际出现的是: 77285 - 并且没有总数

3 个答案:

答案 0 :(得分:15)

您无法从函数返回两次。您可以将这两个值都返回为tuple

return total_students, all_in_all

然后将返回值解压缩为两个变量。

例如:

>>> def func():
...     return 1, 2
... 
>>> v1, v2 = func()
>>> v1
1
>>> v2
2

答案 1 :(得分:2)

首先,您不能返回两次,将代码更改为此以便返回元组。

我还修了你的数学计算总费用。您将学生总数乘以总成本,您想分别计算每所大学。 CalTech的学生将支付37704美元,而不是所有大学的总费用。

def total_enrollment(a):
    total_students = 0
    all_in_all = 0
    for e in a:
        total_students = total_students + e[1]
        all_in_all += (e[1] * e[2])
    return (total_students, all_in_all)

然后你可以像这样访问它们

>>>result = total_enrollment(usa_univs)
>>>print result[0]
77285
>>>print result[1]
3058581079

答案 2 :(得分:0)

“感谢您的澄清。我已经做出了改变,但第二个答案仍然是错误的21014177925而不是3058581079.任何想法为什么会这样?”

错误在于:

for e in a:
    total_students = total_students + e[1]
    costsum = costsum + e[2]

您正在总结每所大学的费用,然后将这笔金额乘以每个学生的费用 - 这大于个人教育的费用。想想这是否是你真正想做的事情。