及格資格,我需要一個號碼(考試標記)進行分類,並返回一個字符串:與Python集合
A+=10, 10>A>9, 9>B>7, 7>C>5, 5>D
所以,如果我的印記,是一個「8.5」,它將返回「B」。
問題是我必須使用一個集合來解決這個問題,因爲我是一個Python新手,我不知道我應該使用什麼類型的集合。
及格資格,我需要一個號碼(考試標記)進行分類,並返回一個字符串:與Python集合
A+=10, 10>A>9, 9>B>7, 7>C>5, 5>D
所以,如果我的印記,是一個「8.5」,它將返回「B」。
問題是我必須使用一個集合來解決這個問題,因爲我是一個Python新手,我不知道我應該使用什麼類型的集合。
我不知道任何適合這種類型的連續範圍檢查的收集/容器。我會用一個if
聲明:
def letter_grade(mark):
if mark >= 10:
return "A+"
elif 9 < mark < 10:
return "A"
elif 7 < mark <= 9:
return "B"
elif 5 < mark <= 7:
return "C"
else:
return "D"
如果你知道mark
是一個離散值(比如,0至10之間的整數),一本字典是正確的:
# Something like these. A list can already be indexed by integers,
# or you can create a dictionary that is also indexed by integers.
>>> marks_list = ["D", "D", "D", "D", "D", "C", "C", "B", "B", "A", "A+"]
>>> marks_dict = dict(enumerate(marks_list))
>>> marks[9]
'A'
我想OP想要一個使用容器而不是包含控制結構的函數驅動的解決方案(如if
)。 @Martijn彼得斯添加了一個很好的評論,因爲它似乎被忽視的第一篇文章。 bisect是關鍵。
首先,你需要創建的斷點列表:
breakpoints = [6, 7, 8, 9]
這表明了字母等級(分別爲d,C,B和A)最小值。 'F'是一個特殊情況,因爲它填充的值小於60,因此作爲第一個元素添加到等級信函列表中。你所做的等級字母列表如下:
grades = ['F', 'D', 'C', 'B', 'A']
最後,您使用bisect
獲得至少score
的最接近的最低值的索引,並將其作爲該指數爲等級:
score = 8.5
print grades[bisect(breakpoints, score)] # outputs 'B'
總之,這裏是結合的編碼塊與進口:
import bisect
breakpoints = [6, 7, 8, 9]
grades = ['F', 'D', 'C', 'B', 'A']
score = 8.5
print grades[bisect.bisect(breakpoints, score)] # outputs 'B'
有沒有必要讓自己的功能,當你有w若要創建此已經有了內置的方法。
提示:look up * bisection *。 –
8.5不是B嗎? – chepner
該死的,你是對的chepner! – Panoremux