gpt4 book ai didi

python - MIT Python 类(class) 6.00.1X 第 8 讲 使用异常子句将字母成绩转换为数字成绩

转载 作者:太空宇宙 更新时间:2023-11-03 20:26:55 28 4
gpt4 key购买 nike

此问题来自 MIT Python 类(class) 6.00.1X,Lectrue 8。我尝试了两段略有不同的代码。两者都是为了计算每个学生的平均成绩。

第一个代码没有考虑到可能存在字母等级,第二个代码则考虑到了。实际上,在运行第二个代码时,我预计学生 Wilma 的成绩会较低。因为我在第二个中设置了字母等级“A”返回 90.0。然而,结果显示,在第二个代码中,Wilma 的平均成绩甚至高于第一个代码,为 25.0,而第一个代码中的平均成绩为 17.466666666666665。

我不知道哪里出了问题。我非常感谢任何帮助和建议。

#the first code
def getsubjectStats(subject, weights):
return[[elt[0], elt[1], avg(elt[1], weights)]
for elt in subject]

def dotProduct(a, b):
result = 0.0
for i in range(len(a)):
result += a[i]*b[i]
return result

def avg(grades, weights):
try:
return dotProduct(grades, weights)/len(grades)
except ZeroDivisionError:
print('no grades data')
return 0.0


test = [[['fred', 'flintstone'], [10.0, 5.0, 85.0]],
[['barney', 'rubble'], [10.0, 8.0, 74.0]],
[['wilma', 'flintstone'], [8.0, 10.0, 96.0]],
[['dino'], []]]
weights = [.3, .2, .5]

print(getsubjectStats(test, weights))

#the second code
def getSubjectStats1(subject,weights):
return [[elt[0], elt[1], avg1(elt[1], weights)]
for elt in subject]
def dotProduct1(a, b):
result = 0.0
for i in range(len(a)):
result += a[i] * b[i]
return result
def avg1(grades, weights):
try:
return dotProduct1(grades, weights)/len(grades)
except ZeroDivisionError:
print('no grades date')
return 0.0
except TypeError:
newgrades = [convertLetterGrade(elt) for elt in grades]
return dotProduct1(newgrades, weights)/len(newgrades)

def convertLetterGrade(grade):
if type(grade) == int:
return grade
elif grade == 'A':
return 90.0
else:
return 60.0

test0 = [[['fred', 'flintstone'], [10.0, 5.0, 85.0]],
[['barney', 'rubble'], [10.0, 8.0, 74.0]],
[['wilma', 'flintstone'], [8.t0, 10.0, 'A']],
[['dino'], []]]
weights0 = [.3, .2, .5]

print(getSubjectStats1(test0, weights0))


I expect:

the first one:
no grades data
[[['fred', 'flintstone'], [10.0, 5.0, 85.0], 15.5], [['barney', 'rubble'], [10.0, 8.0, 74.0], 13.866666666666667],
[['wilma', 'flintstone'], [8.0, 10.0, 96.0], 17.466666666666665], [['dino'], [], 0.0]]

the second one:
...[['wilma', 'flintstone'], [8.0, 10.0, 'A'], 16.466666666666665]...

Actually, the first one meets my expectation, but actual output of the second one is ... [['wilma', 'flintstone'], [8.0, 10.0, 'A'], 25.0]...

最佳答案

convertLetterGrade() 中,您正在检查 grade 是否为 int,但传递的 grade 参数是 float 。因此,调用 else 条件并将数字成绩转换为 60.0

要修复,请在 convertLetterGrade() 中更改

如果类型(等级)== int:

如果类型(等级)== int 或类型(等级)== float:

关于python - MIT Python 类(class) 6.00.1X 第 8 讲 使用异常子句将字母成绩转换为数字成绩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57754043/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com