def calGPAbyLetter(letters):
''' (str) -> float OR str
Take all the grade letters, limited to 10 subjects, and
calculate GPA. Grade letters must be A, B, C, D or F.
>>> calGPAbyLetter("A A A B")
3.75
>>> calGPAbyLetter("A B B B")
3.25
>>> calGPAbyLetter("A B B B A C F A D ")
2.67
>>> calGPAbyLetter("A A A A B B B A C F A D F")
'Error'
>>> calGPAbyLetter("A A A A B C F A D F")
2.6
>>> calGPAbyLetter("S A B C F A D F")
'Error'
'''
tGP = 0.0
letter = map(str, letters.split())
if len (letter) > 10:
return "Error"
for i in letter:
gp = checkGP(i)
if gp is str:
return gp
tGP = tGP + gp
return round(tGP / len(letter), 2)
def checkGP(letter):
''' (str) -> int OR str
Assign grade point from grade letter.
Grade letters must be A, B, C, D or F.
>>> checkGP('A')
4
>>> checkGP('B')
3
>>> checkGP('S')
'Error'
'''
if letter < 0:
return "Error"
elif letter == "F":
return 0.0
elif letter == "D":
return 1.0
elif letter == "C":
return 2.0
elif letter == "B":
return 3.0
elif letter == "A":
return 4.0
else:
return "Error"
现在我输入
calGPAbyLetter("A A A S")
它返回了
Traceback (most recent call last):
File "<pyshell#33>", line 1, in <module>
calGPAbyLetter("A A A B A A A A S")
File "/Users/Sahiphopz/Documents/Programming and Algorithm/a05.py", line 30, in calGPAbyLetter
tGP = tGP + gp
TypeError: unsupported operand type(s) for +: 'float' and 'str'
what to do to fix this please help
答案 0 :(得分:1)
您的错误原因是
if gp is str:
不符合您的想法。 str
是一个表示字符串的类。因此,您的代码所说的gp
与类str
相同,而不是if type(gp) == str:
。你需要做的是:
class A:
pass
a = A()
print(a is A)
采用以下示例:
A
这将创建一个名为a
的类,以及一个名为a
的类的实例。虽然A
的类型为A
,但它本身不是print(a is A)
,因此
False
将打印tGP
。
这是导致代码错误的原因。 if语句未能按预期执行,因此您的代码尝试添加gp
,这是一个浮点数"Error"
,设置为var count = 1;
$("body").html("<button id=\"" + count +"\">1</button>");
$("body").on('click', '#' + count, function() {
count++;
$("body").html($("body").html() + "<button id=\"" + count +"\">" + count +"</button>");
});
,这会导致您的错误
答案 1 :(得分:0)
您可以返回False而不是字符串&#34; ERROR&#34;像这样,
ibtool --compile MainMenu.storyboardc MainMenu.storyboard --module Book_Sources
答案 2 :(得分:0)
正如错误中所述,问题在于您尝试将str
添加到float
。您可以通过检查gp
是否为str
来解决此问题,但您的方法不起作用。 gp
的类型为str
,而str
本身就是一种类型,因此请检查
if gp is str
不起作用,因为它们不具有可比性。相反,用这个替换该行:
if type(gp) == str
或
if gp == "Error"
其中任何一个都应该起作用。
答案 3 :(得分:0)
以下是构建逻辑的更清晰的方法。
def calGPAbyLetter(letters):
letter = list(map(str, letters.split()))
if len(letter) > 10:
raise Exception('Maximum of 10 grades permitted')
grades = list(map(checkGP, letter))
return round(sum(grades) / len(grades), 2)
def checkGP(letter):
d = {'F': 0, 'D': 1, 'C': 2, 'B': 3, 'A': 4}
try:
return d[letter]
except KeyError:
print('Unmapped grade supplied')
<强>解释强>
checkGP
内使用字典,而不是if
/ else
构造。map(checkGP, letter)
在letter
列表的每个值上运行该函数。