我必须修改gp函数,这样它才能通过加减0.3分来处理+和-级。例如,B+相当于3.3分,C-相当于1.7分。
举例说明。
>>> gp('A-')
3.7
>>>gp('B+')
3.3
我的建议是,我可以只添加一堆elif子句来单独测试每个分数,但类似的设计是使用对s.startswith的调用来计算字母分数的值,然后使用s.endswith来查看是否应该增加或减去0.3分。
到目前为止,这就是我所拥有的。
def gp(s):
A = 4
return A
B = 3
return B
C = 2
return C
D = 1
return D
F = 0
return f
发布于 2018-06-01 23:36:26
您可以将成绩和后缀的数值存储在字典中,而不是一系列if/elif
语句。此外,您不必使用startswith
或endswith
,只需在检查长度后使用s[0]
和s[1]
来获取字符串中的第一个或第二个字符。您还可以使用s[1:]
从1
的th位置开始获取所有内容,即使它是空的。
grades = {'A': 4, 'B': 3, 'C': 2, 'D': 1, 'F': 0}
signs = {'+': 0.3, '-': -0.3, '': 0}
def gp(s):
return grades[s[0]] + signs[s[1:]]
>>> gp("A+")
4.3
>>> gp("C-")
1.7
>>> gp("F")
0
发布于 2018-06-01 23:38:15
我的建议是使用字典来计算每个特定等级的分数。使用字典有点像switch
语句的Python等效物,通常被认为比长的if/elif/else
链更惯用。(我的答案是假设您使用的是标准的4.0 GPA计算尺度。如果没有,显然可以根据您的需要对其进行更改。)
grade_to_points = {
'A+': 4.0,
'A': 4.0,
'A-': 3.7,
'B+': 3.3,
'B': 3.0,
...
}
def gp(grade):
points = grade_to_points.get(grade)
if points is None:
raise ValueError('{:r} is not a valid grade!'.format(grade))
发布于 2018-06-01 23:36:47
你应该使用字典
def function(grade)
dict = {'A':4, 'B':3, 'C':2, 'D':1, 'F':0}
if grade[1] == '+':
return dict[grade[0]]+0.3
elif grade[1] == '-':
return dict[grade[0]] - 0.3
然后根据符号加或减0.3
https://stackoverflow.com/questions/50646663
复制相似问题