要求: 一個數n,如果:
1. n > 9, n為A類
2. n < 9 and n > 8, n為B類
3. n < 8 and n > 7, n為C類
4. n <7 and n > 6, n為D類
4. n < 6, n為E類
使用if-else結構必然是能夠完成要求的,但是顯得不夠優雅,不妨嘗試一下如下方法:
1. 使用zip打包數據
def grade(score): grades = list(zip("ABCD", (9, 8, 7, 6))) return next((grade for grade, limit in grades if score >= limit), "E") print([grade(9), grade(5), grade(7)])
輸出結果:
['A', 'E', 'C']
解釋:
使用zip()函數對數據和類型打包為元組對,然後把元組對打包為一個列表,如果查看grades裡面的內容就會使如下:
[('A', 9), ('B', 8), ('C', 7), ('D', 6)]
這時候去通過數值去判斷對應的類型,如果不在這中間,說明是比6還要小的,則為E類.在這個地方使用了列表解析,我在前面的文章中對此有過比較詳細的說明,如果不懂,可以去看一下: 列表解析,集合解析,字典解析,
2. 使用字典包裝數據:
grades = {"A": 9, "B": 8, "C": 7, "D": 6} def convert_grade(src): for ltrgrd, numgrd in grades.items(): if src >= numgrd: return ltrgrd return "E" print(convert_grade(5))
這個代碼非常簡單,就不做多餘的說明.