我的学习问题是: 定义一个过程,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 - 并且没有总数
答案 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]
您正在总结每所大学的费用,然后将这笔金额乘以每个学生的费用 - 这大于个人教育的费用。想想这是否是你真正想做的事情。